一段代码的问题,using(...){},是什么意思?
在petshop4.0的数据访问层的项目中有个Category.cs文件,这里面有段代码:
//Execute the query
using (SqlDataReader rdr = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, SQL_SELECT_CATEGORY, parm)) {
if (rdr.Read())
category = new CategoryInfo(rdr.GetString(0), rdr.GetString(1), rdr.GetString(2));
else
category = new CategoryInfo();
}
return category;
为什么要写成这个样子呢,using(...){},直接写:
SqlDataReader rdr = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, SQL_SELECT_CATEGORY, parm))
if (rdr.Read())
category = new CategoryInfo(rdr.GetString(0), rdr.GetString(1), rdr.GetString(2));
else
category = new CategoryInfo();
不行吗,我以前都是这样写的,到底区别是什么?
------解决方案--------------------using()
{
}
形成了一个区域,当程序远行完这个段之后,它所占用的资源将自动释放,在这里就是SqlDataReader rdr 等,你的方法也可以,但你要显式地释放对象!
------解决方案--------------------using(AAA a = new AAA())
{
//Sth
}
相当于:
AAA a = new AAA();
try
{
//Sth
}
finally
{
a.Dispose();
}
所以使用这种using语句要求AAA类实现IDisposable接口。
------解决方案--------------------当你写using(){ 的时候,表明你声明了你的结构需要确保释放资源。重要的东西声明再先,是个好的编程习惯。何况这个语法也更加精炼和清晰。