2010-06-25 4 views

ответ

9

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

((IDisposable)myObject).Dispose(); 

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

+2

+1 для упоминания о его явной реализации. Как говорили другие на базе, но вы все равно видите это - вы ответили, почему вы не можете легко это увидеть. –

+2

Какова причина использования явной реализации? – MCS

+0

@MCS, это хороший вопрос! На самом деле, это звучит как хороший * новый * вопрос для stackoverflow, почему некоторые классы имеют явные реализации IDisposable, так как он маскирует тот факт, что объект должен быть удален для среднего разработчика, который не обращается к документации каждый раз, когда он/она использует класс. –

10

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

+0

Я не вижу Dispose метод там. – MCS

+2

Прокрутите вниз до «Явные реализации интерфейса» – blu

+0

О, он есть, только дальше по странице в разделе «Явные реализации интерфейса». Почему это? И почему этот метод не появляется в IntelliSense, когда у меня есть экземпляр FtpWebResponse? – MCS

4

Если вы внесете в явном виде interface, вы не получите метод в списке. Чтобы получить доступ к этому методу, вам необходимо выполнить этот объект для реализации interface.

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

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

Смежные вопросы