Как этот класс реализует IDisposable, если у него нет метода Dispose? - PullRequest
5 голосов
/ 25 июня 2010

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

Ответы [ 5 ]

10 голосов
/ 25 июня 2010

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

9 голосов
/ 25 июня 2010

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

((IDisposable)myObject).Dispose();

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

4 голосов
/ 25 июня 2010

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

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

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

3 голосов
/ 25 июня 2010

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

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

альтернативный текст http://img227.imageshack.us/img227/2428/redgatesnetreflector.png

2 голосов
/ 25 июня 2010

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

...