Какова цель invalidHandleValue в SafeHandle?
SafeHandle
конструктор принимает invalidHandleValue
, Для чего он используется, если вам нужно реализовать IsInvalid
тем не мение потому что он понятия не имеет, какая переменная-член содержит указатель [Я не знал, что реализовал handle
переменная-член для вас]?
2 ответа
Решение
Глядя на это в DotPeek, я вижу, что он используется только для инициализации protected IntPtr handle
переменная-член.
protected SafeHandle(IntPtr invalidHandleValue, bool ownsHandle)
{
this.handle = invalidHandleValue;
...
}
Я бы сказал, что логика для этого что-то вроде:
- Они хотят гарантировать, что
handle
переменная-член инициализируется чем-то, поэтому они заставляют вас передавать недопустимое значение. - Там может быть дополнительная логика, которую вы хотите проверить в
IsInvalid
, поэтому они не удосужились предоставить реализацию по умолчанию (что потребовало бы сохранения переданногоinvalidHandleValue
в ктор тоже.)
Это значение по умолчанию handle
когда ты звонишь new SafeHandleDerivedClass()
(производный класс может вызвать base.SetHandle(someValue)
в конструкторе, но перед этим вызовом значение будет тем, что было передано в конструктор базового класса).