SafeHandle中invalidHandleValue的目的是什么?

时间:2013-07-15 00:35:35

标签: c# safehandle

The SafeHandle constructor需要invalidHandleValue。如果你必须实现IsInvalid无论如何因为它不知道哪个成员变量包含指针 [我不知道它实现了handle成员变量为你]?

2 个答案:

答案 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),但在调用之前,该值将是传入的值到基类构造函数)。