我觉得using的这种用法,使代码结构很清晰。
比如声明多个对象的时候,或者有多个链接和内存需要释放时。- namespace statement
- {
- //指定Font类的别名为F
- using F = System.Drawing.Font;
-
- class Program
- {
- static void Main(string[] args)
- {
- //using 强制资源清理
- using (TextWriter writer = File.CreateText(@"E:\test.txt"))
- {
- //使用别名来实例化对象
- F font = new F("宋体", 12);
- writer.WriteLine(font.Name.ToString() + font.Size.ToString());
- }
-
-
- //上面的using语句等价于
- TextWriter w = File.CreateText(@"E:\test.txt");
- try
- {
- F font = new F("宋体", 12);
- w.WriteLine(font.Name.ToString() + font.Size.ToString());
- }
- finally
- {
- if (w != null) w.Dispose();
- }
-
-
- //也可以在using之前声明对象
- TextReader r = File.OpenText("E://test.txt");
- using (r)
- {
- Console.WriteLine(r.ReadToEnd());
- }
-
-
- //对象类型相同时,可以使用多个:
- using (StreamReader reader = new StreamReader("1.txt"), reader2 = new StreamReader("2.txt"))
- {
- //do something
- }
-
-
- //嵌套using
- using (SqlConnection conn = new SqlConnection())
- {
- using (SqlCommand cmd = new SqlCommand())
- {
- //嵌套using 缩进太多,从而不便于观察代码,可以用,但适可而止,如果有多层嵌套请使用 多重using
- //这一层如果出错,不会影响上一层conn的释放,也就是说可以这么用
- }
- }
-
-
- //多重using
- using (StreamReader reader = new StreamReader("1.txt"))
- using (StreamWriter writer = new StreamWriter("1.txt"))
- using (SqlConnection conn = new SqlConnection())
- using (SqlCommand cmd = new SqlCommand())
- {
- //这样操作也可以最后释放所有资源,并且不会因嵌套using而产生太多缩进
- //通过reflector观察发现系统最后会生成跟嵌套using相同的代码
- }
-
-
- }
- }
- }
复制代码 |