我已经阅读了很多关于C#中终结器和IDisposable
的内容。当我终于从这个关于终结器和IDisposable
混乱不堪的事情中有所清晰时,突然之间,出现了这个SafeHandle玩意儿。
我的信念再次被彻底颠覆了。我应该使用什么?
我已经阅读了很多关于C#中终结器和IDisposable
的内容。当我终于从这个关于终结器和IDisposable
混乱不堪的事情中有所清晰时,突然之间,出现了这个SafeHandle玩意儿。
我的信念再次被彻底颠覆了。我应该使用什么?
SafeHandle只在处理Win32互操作调用时有用。在Win32中,大多数对象都由“句柄”表示,包括窗口、互斥体等等。因此,.NET SafeHandle使用可释放模式确保Win32句柄被正确关闭。
因此,如果您正在使用Win32互操作调用并返回Win32句柄,则应使用SafeHandle。对于自己的对象,您应使用IDisposable和终结器。
SafeHandle
吗?仅仅因为您很可能根本没有直接访问句柄的可见性?抱歉,我并不是在挑衅,只是想理解您的意思。 - Andrew SavinykhSafeHandle
”是什么意思。通常情况下,你不应该从SafeHandle
派生,而只能在使用Interop调用时使用它。原问题询问是否应该从SafeHandle
派生或实现IDisposable
。前者几乎从来不是一个好主意。所以只剩下后者了。而且你只能在你维护的类/对象上实现IDisposable
(即你的类/对象)。所以我猜你困惑的是我用“对象”而不是“类”这个词吧? - CodeNaked也许终止保护网值得代价,但代价可能相当高,并且安全保障可能不如人们所希望的可靠。