The SafeHandle
constructor需要invalidHandleValue
。如果你必须实现IsInvalid
无论如何因为它不知道哪个成员变量包含指针 [我不知道它实现了handle
成员变量为你]?
答案 0 :(得分:2)
在DotPeek中查看它,我发现它仅用于初始化protected IntPtr handle
成员变量。
protected SafeHandle(IntPtr invalidHandleValue, bool ownsHandle)
{
this.handle = invalidHandleValue;
...
}
我会说这个逻辑是这样的:
handle
成员变量被初始化为某个东西,因此它们会让您传递无效值。IsInvalid
中测试其他逻辑,因此他们无需提供默认实现(这也需要在ctor中保存传递的invalidHandleValue
。) 答案 1 :(得分:1)
当你调用handle
时,它是默认值new SafeHandleDerivedClass()
(派生类可能在构造函数中调用base.SetHandle(someValue)
,但在调用之前,该值将是传入的值到基类构造函数)。