2

构造SafeHandle函数接受一个invalidHandleValue. 如果IsInvalid无论如何都必须实施,它有什么用因为它不知道哪个成员变量持有指针[我不知道它handle为你实现了成员变量]?

4

2 回答 2

2

在 DotPeek 中查看它,我看到它仅用于初始化protected IntPtr handle成员变量。

protected SafeHandle(IntPtr invalidHandleValue, bool ownsHandle)
{
  this.handle = invalidHandleValue;
  ...
}

我会说这个的逻辑是这样的:

  • 他们想保证handle成员变量被初始化为某种东西,所以他们让你传递无效的值。
  • 可能还有您想要测试 in 的其他逻辑IsInvalid,因此它们不会费心提供默认实现(这也需要保存传递invalidHandleValue​​的 ctor。)
于 2013-07-15T00:43:48.880 回答
1

handle它是你调用时的默认值new SafeHandleDerivedClass()(派生类可能会base.SetHandle(someValue)在构造函数中调用,但在调用之前,值将是传入基类构造函数的任何值)。

于 2013-07-15T00:43:27.530 回答