7.7 using语句

这里的using是语句,而非using指令,using指令为导入指定命名空间,而using语句则是为确保正确使用IDisposable对象的方便语法。这里所谓正确使用指的是,当使用完毕实现了IDisposable接口的对象以后自动调用它的Dispose()方法。

其语法为:


using(局部变量声明及初始化语句,多个使用逗号分隔){

//语句或语句块

}


其中的局部变量声明部分负责声明在“语句或语句块”中使用的对象变量,可以声明多个变量,以逗号隔开即可。

下面的代码是使用using语句前的用法,可以看到,通过将font1对象放入try块中,并在finally块中调用使用完的font1变量的Dispose()[1]方法释放资源,如图7-10所示。

7.7 using语句 - 图1

图 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用于执行与释放或重置非托管资源相关的应用程序定义的任务。