2011-05-03 101 views
4

我有以下代碼:我是否必須處理我不使用的返回對象?

WebRequest request = WebRequest.Create("ftp://myServer/myDirectory"); 
request.Method = WebRequestMethods.Ftp.MakeDirectory; 
request.Credentials = new NetworkCredential("userName", "password"); 

request.GetResponse(); 

我必須配置一個由WebRequest返回WebResponse對象?

回答

10

你應該。敷在using聲明,它會自動配置外出時的範圍

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

} 
+0

即使你不這樣做,它也會最終處置,但你真的應該這樣做。 – cadrell0 2011-05-03 16:27:56

4

至於要處理,我會說不。當CLR檢測到沒有對該對象的引用時,該對象將被安排進行垃圾回收。您可能遇到的問題是,不能保證對象及其屬性將按正確的順序清理。簡單的對象/類,無論是.NET Framework還是自定義對象/類的一部分,都很少實現iDisposable接口。如果一個對象/類實現了iDisposable,那麼您應該明確地調用dispose方法來確保正確處理清理,因爲設計者有一些跡象表明需要以特定方式進行清理。正如Stecya所說的那樣,在一個使用塊中進行包裝是一種很好的方式,可以自動完成。你也可以使用try/finally塊來實現同樣的事情(在finally塊中處理對象)。

+0

你似乎在這裏有點矛盾。大多數Idisposables __必須明確處理,否則可能會出錯。不能依靠GC。這有多重要取決於資源和App類型。 – 2011-05-06 10:26:05

3

是的,你應該。你說得對,這不是完全明顯,通常你應該只處置你創建的對象(與new),離開那些你從單純另一組件/借款。

關鍵在於WebRequest.Create()的名稱和描述,它是一種工廠方法,以您的名義創建一些東西,並且調用者(您)負責返回值。

當然,首選語法是using() {}塊。

相關問題