2013-07-30 32 views
4

我是C#學習的初學者。關於「使用」關鍵字的基本C#

我意識到using就像是在C#

import但後來我在這種情況下遇到了:

using (con) 
{ 
    con.Open(); 
    cmd.ExecuteNonQuery(); 
} 

只是好奇這是什麼使用在這裏做什麼,有什麼不同而不using (con)

回答

11

這種形式的usingstatement,而不是directive)與IDisposable接口,收回非託管資源。

非託管資源就像數據庫連接一樣,不能被垃圾回收器簡單地回收。相反,他們需要有條不紊地關閉。當using代碼塊超出範圍時,將在數據庫連接對象上調用Dispose()方法,關閉連接並釋放資源。

作爲示例,請檢查SQLConnection類。請注意,它繼承了DBConnection類,該類又實現了IDisposable接口。 SQLConnection對象implements the Dispose method,當範圍離開using塊時關閉連接。

請注意,您可以通過abuse the using statementIDisposable獲得樂趣和利潤。 ASP.NET MVC使用using關閉HTML標記!

5

using語句將調用塊的結尾處的Dispose方法。該對象必須實現IDisposable接口才能使其工作。它的工作原理是因爲您的對象con的執行方式爲IDisposable,在此方法之後它的執行方式爲null。我喜歡實施using塊聲明該對象,對於樣品:

using (var con = new SqlConnection("connection string")) 
{ 
    con.Open(); 

    using(var cmd = con.CreateCommand()) 
    { 
     cmd.CommandText = "select count(*) from table"; 
     result = (int) cmd.ExecuteScalar(); 
    } 

    con.Close(); 
} 
3

根據MSDN

C#,通過.NET Framework公共語言運行庫(CLR),自動釋放用於將存儲器存儲不再需要的對象。記憶的釋放是非確定性的;內存將在CLR決定執行垃圾回收時釋放。但是,通常最好儘快釋放有限的資源,例如文件句柄和網絡連接。

using語句允許程序員指定何時使用資源的對象應釋放它們。提供給using語句的對象必須實現IDisposable接口。這個接口提供了Dispose方法,它應該釋放對象的資源。

使用語句可以在達到using語句的末尾時退出,或者拋出異常並且控制在語句結束之前離開語句塊。

using語句強制清理資源,開發人員不必顯式處理資源或等待垃圾收集器回收資源。

3

using塊可以應用於任何實現了IDisposable接口的.NET對象。如果您嘗試將塊應用於沒有的對象,那麼您將收到編譯錯誤。

using塊實際上會在using塊的代碼周圍產生一個try-finally塊。

以下:

using (con) 
{ 
    con.Open(); 
    cmd.ExecuteNonQuery(); 
} 

相當於寫作:

try 
{ 
    con.Open(); 
    cmd.ExecuteNonQuery(); 
} 
finally 
{ 
    con.Close(); 
    con.Dispose(); 
} 

using塊艾滋病是確保一次性對象生產力的提高進行適當的清理,在我看來,創建代碼更易於閱讀和維護。

注意:您可以嵌套using塊,像這樣:

using(con) 
using(cmd) 
{ 

} 

using聲明在C#中VB.NET的Imports語句的等價物。

+0

不確定你會調用'嵌套'它只是下一個像不需要括號,如if語句,它只適用於下一行代碼。 – Phill

+0

好的感謝使用就像嘗試和最終的事情不錯 – Bruce