7.7 using语句
这里的using是语句,而非using指令,using指令为导入指定命名空间,而using语句则是为确保正确使用IDisposable对象的方便语法。这里所谓正确使用指的是,当使用完毕实现了IDisposable接口的对象以后自动调用它的Dispose()方法。
其语法为:
using(局部变量声明及初始化语句,多个使用逗号分隔){
//语句或语句块
}
其中的局部变量声明部分负责声明在“语句或语句块”中使用的对象变量,可以声明多个变量,以逗号隔开即可。
下面的代码是使用using语句前的用法,可以看到,通过将font1对象放入try块中,并在finally块中调用使用完的font1变量的Dispose()[1]方法释放资源,如图7-10所示。
图 7-10 using语句
不使用using语句的示例如代码清单7-15所示。
代码清单7-15 不使用using语句的示例
1 using System;
2 using System.Drawing;
3
4 namespace ProgrammingCSharp4
5{
6 public class StatementSample
7{
8 static void Main()
9{
10 Font font1=new Font("Arial",10.0f);
11 try
12{
13 byte charset=font1.GdiCharSet;
14}
15 finally
16{
17 if(font1!=null)
18 font1.Dispose();
19}
20}
21}
22}
那么使用using语句后会是怎样的呢?下面对上述代码进行改写,如代码清单7-16所示,font1的声明和初始化放在了using语句中,这点一定要注意,不能仅仅进行声明,还必须包括初始化,如果要使用多个对象就直接在font1对象的初始化语句后使用逗号分隔直接加即可。从第10行到第13行为相关资源的有效范围,出了这个范围CLR自动调用相关对象的Dispose方法。因此,这里使用的资源必须是实现了IDisposable的对象。使用using语句进行改写后的示例如代码清单7-16所示。
代码清单7-16 使用using语句进行改写后的示例
1 using System;
2 using System.Drawing;
3
4 namespace ProgrammingCSharp4
5{
6 public class StatementSample
7{
8 static void Main()
9{
10 using(Font font1=new Font("Arial",10.0f))
11{
12 byte charset=font1.GdiCharSet;
13}
14}
15}
16}
[1]Dispose用于执行与释放或重置非托管资源相关的应用程序定义的任务。