我是一个C#的初学者。
我意识到,在C#中using
就像Python中的 import
语句。
但是,我遇到了这种情况:
using (con)
{
con.Open();
cmd.ExecuteNonQuery();
}
我很好奇这里使用的 using
是做什么用的,和没有 using (con)
有什么不同。
using
(the statement, not the directive) works with the IDisposable
interface, to reclaim unmanaged resources.
非托管资源是指像数据库连接这样的资源,不能简单地由垃圾回收器回收。相反,它们需要以有序的方式关闭。当using
代码块超出范围时,将在数据库连接对象上调用Dispose()方法,关闭连接并释放资源。
IDisposable
接口。SQLConnection对象实现了Dispose方法,当作用域离开using
块时关闭连接。using
语句和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();
}
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
语句相当于VB.NET中的Imports
语句。using语句允许程序员指定使用资源的对象应在何时释放它们。提供给using语句的对象必须实现IDisposable接口。该接口提供Dispose方法,应释放对象的资源。
当到达using语句的结尾或在语句块结束之前控制离开语句块时抛出异常,都会导致退出using语句。
using语句强制清理资源,而无需开发人员显式地处理它们或等待垃圾回收器回收资源。