我已经阅读了很多关于终结器和IDisposableC#的内容.当我终于从终结者的这种可怕的混乱中清楚地看到IDisposable,突然间,突然间,出现了这个SafeHandle的事情.我的信念再次完全动摇了.我应该用什么?
Cod*_*ked 18
SafeHandle仅在处理Win32 Interop调用时有用.在Win32中,大多数东西都由"句柄"表示.这包括Windows,Mutex等.因此,.NET SafeHandle使用一次性模式来确保Win32句柄正确关闭.
因此,如果您正在使用Win32 Interop调用并获取Win32句柄,那么请使用SafeHandle.对于你自己的对象,你会坚持使用IDisposable和终结器.
您可以/应该将SafeHandle用于任何可以表示为IntPtr的非托管资源,即Win32句柄,由非托管代码分配的内存等等.当SafeHandle不适合,但您仍需要处理非托管资源时,请考虑使用自己的类似SafeHandle的类继承CriticalFinalizerObject.
在所有其他情况下(即处理托管资源)实现IDisposable.在大多数情况下,您不需要终结器,大多数托管资源在调用终结器时将不可用,因此无需执行任何操作.
| 归档时间: |
|
| 查看次数: |
3960 次 |
| 最近记录: |