日期:2014-05-19  浏览次数:20551 次

一段代码的问题,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(){ 的时候,表明你声明了你的结构需要确保释放资源。重要的东西声明再先,是个好的编程习惯。何况这个语法也更加精炼和清晰。