Разработчики библиотеки базовых классов .NET решили реализовать метод Dispose
, используя явную реализацию интерфейса :
private void IDisposable.Dispose() { ... }
Метод Dispose
является закрытым, и единственный способ вызвать его - привести объект к IDisposable
, как вы обнаружили.
Причина, по которой это делается, заключается в том, чтобы изменить имя метода Dispose
так, чтобы оно лучше описывало расположение объекта. Для ManualResetEvent
заказным методом является Close
метод.
Для утилизации ManualResetEvent
у вас есть два хороших варианта. Использование IDisposable
:
using (var myManualResetEvent = new ManualResetEvent(false)) {
...
// IDisposable.Dispose() will be called when exiting the block.
}
или звоните Close
:
var myManualResetEvent = new ManualResetEvent(false);
...
// This will dispose the object.
myManualResetEvent.Close();
Подробнее читайте в разделе Настройка имени метода удаления в руководстве по проектированию Реализация финализации и удаления для очистки неуправляемых ресурсов в MSDN:
Иногда доменное имя является более подходящим, чем Dispose
. Например, при инкапсуляции файла может потребоваться имя метода Close
. В этом случае внедрите Dispose
конфиденциально и создайте открытый метод Close
, который вызывает Dispose
.