可能重複:
What is the C# Using block and why should I use it?什麼時候應該使用使用聲明?
我將一箇舊網站到C#,我不知道什麼時候,我應該使用 '使用'。有沒有一般的指導方針?我知道的好處,但我不是100%確定如何使用它。每次我'新'的方法/財產嗎?
SqlConnection awesomeConn = new SqlConnection(connection);
可能重複:
What is the C# Using block and why should I use it?什麼時候應該使用使用聲明?
我將一箇舊網站到C#,我不知道什麼時候,我應該使用 '使用'。有沒有一般的指導方針?我知道的好處,但我不是100%確定如何使用它。每次我'新'的方法/財產嗎?
SqlConnection awesomeConn = new SqlConnection(connection);
如果您想自動處理對象,通常會使用它。否則,你必須手動調用myobj.Dispose()。
見參考documentiation這裏:http://msdn.microsoft.com/en-us/library/yh598w02.aspx
使用是一種方便,使您可以放心,你不能用了處置資源的退出塊。無論何時必須在本地代碼塊中使用IDisposable實施者,都可以並且應該使用它。
MSDN:
作爲一項規則,當您使用IDisposable的對象,還應當聲明並 它實例在using語句。 using語句以正確的方式在對象上調用 Dispose方法,以及(如前所示使用它時 ),一旦Dispose被調用,它也會導致對象本身超出範圍 。在使用塊中,對象是 只讀,不能被修改或重新分配。
using語句確保即使在對象上調用方法時發生 異常,也會調用Dispose。您可以通過將對象放在try塊中並且然後在finally塊中調用Dispose來實現相同的結果;實際上,這是編譯器如何翻譯 使用語句。該代碼示例 更早膨脹以在編譯時下面的代碼(注意額外 大括號來創建該對象的有限範圍內):
實施例:
using (StreamReader stream = new StreamReader("path"))
{
string line = stream.ReadLine();
}
如果一個類實現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();
}
用途:
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成員。
首先確保你完全理解'使用'的作用,然後應該更容易。請參考此msdn頁面:http://msdn.microsoft.com/en-us/library/yh598w02%28v=vs.100%29.aspx – 2012-04-07 18:53:48