2013-10-24 2 views
3

Я использую следующий код в своей программе, мне еще нужно позвонить response.close()? Или реализация FtpWebResponse IDisposable закрывает ответ?Удаляет ли идентификатор ответа FtpWebResponse закрытие ответа?

using (FtpWebResponse response = (FtpWebResponse)request.GetResponse()) 
{ 

} 

Так что, в принципе, мне нужно было бы это сделать? не

using (FtpWebResponse response = (FtpWebResponse)request.GetResponse()) 
{ 
    response.close(); 
} 
+0

Спросите себя, как это будет стоить мне больше, если близкий метод будет вызываться дважды? – Izikon

+0

@ Изикон. Не так ли? Насколько я знаю, все мое приложение рухнет, если я это сделаю. Возможно, вы можете быть более конкретным, вместо того, чтобы задавать вопрос. – naed21

+2

Этот вопрос интересен: http://stackoverflow.com/questions/3119288/why-would-a-class-implement-idisposable-explicitly-instead-of-implicitly – Habib

ответ

4

Нет вы не должны вызывать Close, так как Dispose уже делает это. FtpWebResponse унаследован от WebResponse, и он явно реализовал Dispose, которые внутренне звонят Close.

Код для WebResponse.cs от: http://www.dotnetframework.org/default.aspx/[email protected]/[email protected]/DEVDIV_TFS/Dev10/Releases/RTMRel/ndp/fx/src/Net/System/Net/[email protected]/1305376/[email protected]

/// <internalonly> 
     void IDisposable.Dispose() { 
      try 
      { 
       Close(); 
       OnDispose(); 
      } 
      catch { } 
     } 
Смежные вопросы