从petshop中一实例谈using 的三种用法
在petshop4.0中有这样一段代码:
Code
1 public IList<CategoryInfo> GetCategories() {
2
3 IList<CategoryInfo> categories = new List<CategoryInfo>();
4
5 //Execute a query to read the categories
6 using(SqlDataReader rdr = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, SQL_SELECT_CATEGORIES, null)) {
7 while (rdr.Read()) {
8 CategoryInfo cat = new CategoryInfo(rdr.GetString(0), rdr.GetString(1), rdr.GetString(2));
9 categories.Add(cat);
10 }
11 }
12 return categories;
13 }
在第6行处用到了using,这里我想提醒自己的是,这是using的一种用法之一。
using共有三种用法:
1.引用命名空间,减少冗余代码。
Using System.Web.UI.WebControls;
2.创建命名空间的别名(using 别名)。
using MyAlias = MyCompany.Proj.Nested;
3.即时释放资源。
Using (TestObject a = new TestObject())
{
// 使用对象
}
//对象资源被释放
上面代码其实等同于:
Code
1 public IList<CategoryInfo> GetCategories() {
2
3 IList<CategoryInfo> categories = new List<CategoryInfo>();
4
5 //Execute a query to read the categories
6 using(SqlDataReader rdr = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, SQL_SELECT_CATEGORIES, null)) {
7 while (rdr.Read()) {
8 CategoryInfo cat = new CategoryInfo(rdr.GetString(0), rdr.GetString(1), rdr.GetString(2));
9 categories.Add(cat);
10 }
11 }
12 return categories;
13 }
在第6行处用到了using,这里我想提醒自己的是,这是using的一种用法之一。
using共有三种用法:
1.引用命名空间,减少冗余代码。
Using System.Web.UI.WebControls;
2.创建命名空间的别名(using 别名)。
using MyAlias = MyCompany.Proj.Nested;
3.即时释放资源。
Using (TestObject a = new TestObject())
{
// 使用对象
}
//对象资源被释放
上面代码其实等同于:
Code
1try{
2 SqlDataReader rdr = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text,SQL_SELECT_CATEGORIES, null) ;
3 while (rdr.Read())
4 {
5 CategoryInfo cat = new CategoryInfo(rdr.GetString(0), rdr.GetString(1), rdr.GetString(2));
6 categories.Add(cat);
7 }
8
9 return categories;
10
11 }
12 finally
13 {rdr .Dispose()}
14
这种用法的要求是在using()括号里面的类要实现IDisposable接口,否则的话变异的时候会出错! 1try{
2 SqlDataReader rdr = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text,SQL_SELECT_CATEGORIES, null) ;
3 while (rdr.Read())
4 {
5 CategoryInfo cat = new CategoryInfo(rdr.GetString(0), rdr.GetString(1), rdr.GetString(2));
6 categories.Add(cat);
7 }
8
9 return categories;
10
11 }
12 finally
13 {rdr .Dispose()}
14