我是C#學習的初學者。關於「使用」關鍵字的基本C#
我意識到using
就像是在C#
import
但後來我在這種情況下遇到了:
using (con)
{
con.Open();
cmd.ExecuteNonQuery();
}
只是好奇這是什麼使用在這裏做什麼,有什麼不同而不using (con)
我是C#學習的初學者。關於「使用」關鍵字的基本C#
我意識到using
就像是在C#
import
但後來我在這種情況下遇到了:
using (con)
{
con.Open();
cmd.ExecuteNonQuery();
}
只是好奇這是什麼使用在這裏做什麼,有什麼不同而不using (con)
這種形式的using
(statement,而不是directive)與IDisposable
接口,收回非託管資源。
非託管資源就像數據庫連接一樣,不能被垃圾回收器簡單地回收。相反,他們需要有條不紊地關閉。當using
代碼塊超出範圍時,將在數據庫連接對象上調用Dispose()
方法,關閉連接並釋放資源。
作爲示例,請檢查SQLConnection類。請注意,它繼承了DBConnection類,該類又實現了IDisposable
接口。 SQLConnection對象implements the Dispose method,當範圍離開using
塊時關閉連接。
請注意,您可以通過abuse the using
statement和IDisposable
獲得樂趣和利潤。 ASP.NET MVC使用using
關閉HTML標記!
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();
}
根據MSDN
C#,通過.NET Framework公共語言運行庫(CLR),自動釋放用於將存儲器存儲不再需要的對象。記憶的釋放是非確定性的;內存將在CLR決定執行垃圾回收時釋放。但是,通常最好儘快釋放有限的資源,例如文件句柄和網絡連接。
using語句允許程序員指定何時使用資源的對象應釋放它們。提供給using語句的對象必須實現IDisposable接口。這個接口提供了Dispose方法,它應該釋放對象的資源。
使用語句可以在達到using語句的末尾時退出,或者拋出異常並且控制在語句結束之前離開語句塊。
using語句強制清理資源,開發人員不必顯式處理資源或等待垃圾收集器回收資源。
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
語句的等價物。
不確定你會調用'嵌套'它只是下一個像不需要括號,如if語句,它只適用於下一行代碼。 – Phill
好的感謝使用就像嘗試和最終的事情不錯 – Bruce