Что означает IDisposable.Dispose () в качестве имени метода? - PullRequest
1 голос
/ 24 ноября 2011

Я просто приводил в порядок какой-то код, когда нашел этот регион в классе:

    #region IDisposable Members

        void IDisposable.Dispose()
        {
        } 

     #endregion

Теперь поймите, что это реализует метод Dispose для интерфейса IDisposable, и я знаю, что объявление класса говорит, что этот класс будет реализовывать интерфейс IDisposable.

Чего я не понимаю, так это:

void IDisposable.Dispose()

А не:

public void Dispose()

Я предполагаю, что IDisposable.Dispose явно указал, что это Dispose, который реализует интерфейс IDisposable? Это правильно и в чем преимущество этого?

Ответы [ 2 ]

4 голосов
/ 24 ноября 2011

Это явная реализация интерфейса .

Это означает, что только переменная типа IDisposable может вызывать Dispose для этого класса.

Делать так«скрывает» метод Dispose при использовании с переменной типа класса - он не сможет вызвать его напрямую без предварительного приведения к IDisposable.Возможно, что разработчик сделал это специально.

Кроме того, если класс должен был реализовывать свой собственный Dispose (или наследовать / реализовывать из класса / интерфейса, который также определяет метод Dispose),это позволит существовать нескольким реализациям.

0 голосов
/ 24 ноября 2011

Это явная реализация интерфейса .Полезно, если класс реализует несколько интерфейсов с одинаковыми методами.

...