问题就是,具体是什么时候释放资源?
DataTable dt;
using (dt = new DataTable())
{
dt.Columns.Add("ID");
DataRow dr = dt.NewRow();
dr["ID"] = "name";
dt.Rows.Add(dr);
}
int i = dt.Rows.Count;
这个i依然有值。
DataTable dt;
using (dt = new DataTable())
{
dt.Columns.Add("ID");
DataRow dr = dt.NewRow();
dr["ID"] = "name";
dt.Rows.Add(dr);
}
int i = dt.Rows.Count;
这个i依然有值。
{} <----到了这个括号就会调用 using里面那个对象的IDispose接口的Dispose方法。其实是只要出using的作用域就会调用Dispose,包括异常。这并不是真正的释放,而是调用Dispose而已。
等价于
try
{
//obj操作
}
finally
{
obj.Dispose();
}
我今天在写代码的时候用到了IDbCommand对象
就是在using后面的括号里实例化的。
如下:
using(实例化SqlCommand)
{
}
using(datareader= cmd.ExecuteReader())
{
}
Sql是没有问题的,但是我又写了个Access的
using(实例化OleDbCommand)
{
}
using(datareader= cmd.ExecuteReader())
{
}
此时就报错,说缺少connection属性,但是实际上我在第一个using里面已经给cmd的connection属性赋值了的
于是我就删掉了using,就没问题了
无论因为什么原因,只要离开了这个代码段就自动调用这个类实例的Dispose。