2

SafeHandleコンストラクinvalidHandleValueター. IsInvalidとにかく実装する必要がある場合、それは何に使用されますかどのメンバ変数がポインタを保持しているかがわからないため[メンバー変数が実装されているとは知りませんでしたhandle]?

4

2 に答える 2

2

Looking at it in DotPeek, I see that it is used only to initialize the protected IntPtr handle member variable.

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

I'd say that the logic for this is something like:

  • They want to guarantee that the handle member variable is initialized to something, so they make you pass the invalid value.
  • There might be additional logic you want to test for in IsInvalid, so they don't bother to provide a default implementation (which would require saving the passed invalidHandleValue in the ctor as well.)
于 2013-07-15T00:43:48.880 に答える
1

handleこれは、 for を呼び出すときのデフォルト値ですnew SafeHandleDerivedClass()(派生クラスはbase.SetHandle(someValue)コンストラクターで呼び出すことができますが、その呼び出しの前に、値は基本クラスのコンストラクターに渡されたものになります)。

于 2013-07-15T00:43:27.530 に答える