2012-04-07 75 views
2

可能重複:
What is the C# Using block and why should I use it?什麼時候應該使用使用聲明?

我將一箇舊網站到C#,我不知道什麼時候,我應該使用 '使用'。有沒有一般的指導方針?我知道的好處,但我不是100%確定如何使用它。每次我'新'的方法/財產嗎?

SqlConnection awesomeConn = new SqlConnection(connection); 
+0

首先確保你完全理解'使用'的作用,然後應該更容易。請參考此msdn頁面:http://msdn.microsoft.com/en-us/library/yh598w02%28v=vs.100%29.aspx – 2012-04-07 18:53:48

回答

0

使用是一種方便,使您可以放心,你不能用了處置資源的退出塊。無論何時必須在本地代碼塊中使用IDisposable實施者,都可以並且應該使用它。

3

MSDN

作爲一項規則,當您使用IDisposable的對象,還應當聲明並 它實例在using語句。 using語句以正確的方式在對象上調用 Dispose方法,以及(如前所示使用它時 ),一旦Dispose被調用,它也會導致對象本身超出範圍 。在使用塊中,對象是 只讀,不能被修改或重新分配。

using語句確保即使在對象上調用方法時發生 異常,也會調用Dispose。您可以通過將對象放在try塊中並且然後在finally塊中調用Dispose來實現相同的結果;實際上,這是編譯器如何翻譯 使用語句。該代碼示例 更早膨脹以在編譯時下面的代碼(注意額外 大括號來創建該對象的有限範圍內):

實施例:

using (StreamReader stream = new StreamReader("path")) 
{ 
    string line = stream.ReadLine(); 
} 
11

如果一個類實現IDisposable那麼它會創建一些非託管資源,在完成使用時需要「處置」這些資源。所以,你會做這樣的事情:

SqlConnection awesomeConn = new SqlConnection(connection); 

// Do some stuff 

awesomeConn.Dispose(); 

爲了避免遺忘處置的源泉(在這種情況下,關閉數據庫連接),特別是當一個異常被拋出時,您可以使用using語法自動調用處理時你出去using語句的範圍:使用所有O

try 
{ 
    SqlConnection awesomeConn = new SqlConnection(connection); 

    // do some stuff 
} 
finally 
{ 
    awesomeConn.Dispose(); 
} 
1

用途:

using (SqlConnection awesomeConn = new SqlConnection(connection)) 
{ 
    // Do some stuff 
} // automatically does the .Dispose call as if it was in a finally block 

事實上,使用塊相當於除非它們的生命週期超出了當前的執行範圍,否則實例化它的對象實現IDisposable(即,方法調用)。在這種情況下,例如,如果您有一個一次性成員變量,那麼包含類應該在其Dispose中實現IDisposable和Dispose成員。

相關問題