我使用的是FtpWebResponse類,但沒有看到Dispose方法。 It turns out這個類實現IDisposable,但這樣明確,這樣你必須先投你的實例IDisposable接口調用Dispose之前:爲什麼類會顯式而不是隱式地實現IDisposable?
// response is an instance of FtpWebResposne
((IDisposable) response).Dispose();
爲什麼會一類的,如這一個設計師選擇要明確實現IDisposable?由於Anthony Pegram says這樣做,掩蓋了這樣一個事實,即應該爲普通開發人員處理該對象,而該開發人員在每次使用某個類時都未查閱文檔。
我同意,但這裏怪異的部分是行爲可能不同。反射器顯示Dispose()調用Close(),然後調用名爲OnDispose()的內部虛擬。 Close()不會,所以你可能會從這兩種方法中獲得不同的行爲(儘管它對FtpWebResponse沒有影響,因爲OnDispose()實現是空的) – JMarsch 2010-06-25 15:46:42
兩個具有相同名稱的方法有什麼問題? CLR通過C#(p。546)表示:「某些提供dispose模式的類也提供了一個方便的Close方法;但是dispose模式不需要這種方法。例如,System.IO.FileStream類提供了dispose模式,而這個類也是提供了一種Close方法,程序員發現關閉文件比處理文件更自然。「 – MCS 2010-06-25 15:49:08
@JMarsch:這可能是一個延期; .NET 1.1 BCL類有很多情況,其中'Close'和'Dispose'確實有稍微不同的行爲。 AFAIK,除了'DbConnection'和派生類型之外,這些都已經被清除了。 – 2010-06-25 15:54:26