System Object System Exception System Argument Exception System
Иерархия классов-исключений ( часть классов) System. Object System. Exception System. Argument. Exception System. Arithmetic. Exception System. Array. Type. Mismatch. Exception System. Bad. Image. Format. Exception System. Index. Out. Of. Range. Exception System. Invalid. Cast. Exception System. Null. Reference. Exception System. Out. Of. Memory. Exception System. Execution. Engine. Exception System. Stack. Overflow. Exception . . . System. Object System. Exception System. IOException System. IO. Directory. Not. Found. Exception System. IO. End. Of. Stream. Exception System. IO. File. Load. Exception System. IO. File. Not. Found. Exception System. IO. Path. Too. Long. Exception
Задача освобождения ресурсов. Решение в C++ void main () { try {. . . код С++ f(); . . . код С++ } catch (exception ex) {. . . код С++ } } void f() { Resource R (); // R. Lock(); Lock_Resource LR(R); f. Inner(R); // R. Unlock(); } void f. Inner (Resource& rc) {. . . код бросает исключение } class Resource { public: void Lock() {. . . захват ресурса } void Unlock() {. . . освобождение ресурса } Resource () {. . . } private: . . . данные }; class Lock_Resource { public: Lock_Resource (Resource &rci) { rc = rci; rc. Lock(); } ~Lock_Resource() { rc. Unlock(); } private: Resource& rc; };
Задача освобождения ресурсов. Решение в C#. public static void Main ( string[] args) { try {. . . код С# f(); . . . код С# } catch (exception ex) {. . . код С# } } public void f() { Resource R (); R. Lock(); try { f. Inner(R); } finally { R. Unlock(); } } void f. Inner (Resource& rc) {. . . код бросает исключение } class Resource { public void Lock() {. . . захват ресурса } public void Unlock() {. . . освобождение ресурса } public Resource () {. . . } private: . . . данные }
Пример реализации метода Dispose() public class My. Resource: IDisposable { private Int. Ptr handle; // unmanaged resource private Component component = new Component(); // managed resource private bool disposed = false; public void Dispose() { Dispose(true); GC. Suppress. Finalize(this); } private void Dispose(bool disposing) { // disposing == true явный вызов из Dispose() // disposing == false вызов из деструктора if ( !this. disposed ) { if ( disposing ) // явный вызов Dispose() { component. Dispose(); // Dispose managed resources. } Close. Handle(handle); // Clean up unmanaged resources } disposed = true; } ~My. Resource() { Dispose(false); } }
- Slides: 14