2010-01-12 100 views

回答

13

這意味着obj實現IDisposible和將被適當設置的using塊之後。它的功能一樣:

{ 
    //Assumes SomeObject implements IDisposable 
    SomeObject obj = new SomeObject(); 
    try 
    { 
    // Do more stuff here.  
    } 
    finally 
    { 
    if (obj != null) 
    { 
     ((IDisposable)obj).Dispose(); 
    } 
    } 
} 
+0

哦!太好了!謝謝回覆。 – Ricardo 2010-01-12 18:42:19

+2

幾乎正確的是,使用()並不意味着catch語句,只能嘗試/ finally。 – Turnor 2010-01-12 18:43:24

+0

@Jay Zeng,如在圖形?如果我在「使用」語句中使用我的圖形,我不需要處理? – Ricardo 2010-01-12 18:47:27

5
using (object obj = new object()) 
{ 
    //random stuff 
} 

等同於:

object obj = new object(); 
try 
{ 
    // random stuff 
} 
finally { 
    ((IDisposable)obj).Dispose(); 
} 
+0

幾乎等同。在第一個樣本中,obj超出了範圍。第二,它仍然在範圍之內。類似於for-while等價。 – 2010-01-12 18:51:26

0

它是一種方法,範圍對象,因此Dispose方法被調用退出。這對於數據庫連接非常有用。如果對象沒有實現一次性編譯,將發生編譯時錯誤

0

using確保分配的對象在使用塊之後正確放置,即使在塊中發生未處理的異常。

1

它爲什麼存在壽。

它存在於您關心其生命週期的類中,特別是類在操作系統中封裝資源並且想要立即釋放它的地方。否則,你將不得不等待CLR(非確定性)終結器。

例子,文件處理,數據庫連接,套接字連接,....

+0

這是語法糖 – 2010-01-12 20:43:52

+0

我不同意 - 這是一個衆所周知的模式,所以鼓勵共同的良好做法。 for循環也是語法糖 - 但它總是用於因爲它是一個常見的成語 也我試圖解釋爲什麼你看到它使用 - 爲什麼你會看到非糖的版本 – pm100 2010-01-12 23:46:34

相關問題