Как этот класс реализует IDisposable, если у него нет метода Dispose?

FtpWebResponse реализует IDisposable, но у него нет метода Dispose. Как это возможно?

5 ответов

Решение

У него есть метод Dispose через наследование, но это явная реализация. Чтобы позвонить, вам придется использовать

((IDisposable)myObject).Dispose();

Или, конечно, просто заверните его в using блок, как это делает явный вызов для вас.

Его реализовано в базовом классе WebResponse, см. Http://msdn.microsoft.com/en-us/library/system.net.webresponse_methods.aspx.

Когда вы реализуете interface явно, вы не получите метод в списке. Вам нужно будет привести этот объект к реализованному interface чтобы получить доступ к этому методу.

public class MyClass : IDisposable
{
    void IDisposable.Dispose()
    {
        throw new NotImplementedException();
    }
}

Ссылка: http://msdn.microsoft.com/en-us/library/ms173157.aspx

Это реализовано в базовом классе WebResponse

void IDisposable.Dispose()
{
try
{
    this.Close();
    this.OnDispose();
}
catch
{
}
}

http://img227.imageshack.us/img227/2428/redgatesnetreflector.png

Он наследуется от System.Net.WebResponse, который реализует эти методы.

Другие вопросы по тегам