在没有让我指着MSDN的情况下,有人可以简要,清晰地说明它们的用途以及何时使用它们。 (IntPtr,SafeHandle和HandleRef)

最佳答案

IntPtr只是一个简单的基于整数的结构,可以容纳一个指针(即,在32位系统上为32位大小,在64位系统上为64位大小)。
SafeHandle是用于容纳Win32对象句柄的类-它具有终结器,该终结器可确保在对对象进行GC处理时关闭该句柄。 SafeHandle是一个抽象类,因为不同的Win32句柄具有不同的关闭方式。在引入SafeHandle之前,IntPtr用于保存Win32句柄,但是确保程序员将其正确关闭并防止被GC处理是他们的责任。
HandleRef是一种确保在进行P / Invoke调用时未GC的非托管句柄的方法。如果没有HandleRef之类的东西,如果您的托管代码在P / Invoke调用之后对句柄不执行任何操作,则如果GC在P / Invoke调用期间运行,它将不会意识到该句柄仍在使用中并且可能会对其进行GC 。我想(但我不确定并且没有看过)SafeHandle可能会使用HandleRef作为其对封装句柄的管理的一部分。

关于.net - IntPtr,SafeHandle和HandleRef-解释,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/526661/

10-12 20:43