using多重用法

引言

引用命名空间


using类似于Java语言的import指令,都是引入命名空间(Java中称作包)这种逻辑结构;而不同于C语言中的#include指令,用于引入实际的类库,
using引入命名空间,并不等于编译器编译时加载该命名空间所在的程序集,程序集的加载决定于程序中对该程序集是否存在调用操作,如果代码中不存在任何调用操作则编译器将不会加载using引入命名空间所在程序集。因此,在源文件开头,引入多个命名空间,并非加载多个程序集,不会造成“过度引用”的弊端

创建别名

//using为命名空间创建别名的用法规则为:
using alias = namespace | type;

其中namespace表示创建命名空间的别名;而type表示创建类型别名。例如,在.NET Office应用中,常常会引入Microsoft.Office.Interop.Word.dll程序集,在引入命名空间时为了避免繁琐的类型输入,我们通常为其创建别名如下:

using MSWord = Microsoft.Office.Interop.Word;

这样,就可以在程序中以MSWord来代替Microsoft.Office.Interop.Word前缀,如果要创建Application对象,则可以是这样,

private static MSWord.Application ooo = new MSWord.Application();

而创建别名的另一个重要的原因在于同一cs文件中引入的不同命名空间中包括了相同名称的类型,为了避免出现名称冲突可以通过设定别名来解决,例如:

以using创建别名,有效的解决了这种可能的命名冲突,尽管我们可以通过类型全名称来加以区分,但是这显然不是最佳的解决方案,using使得这一问题迎刃而解,不费丝毫功夫,同时在编码规范上看来也更加的符合编码要求。

//可以同时声明多个资源
using(MyFile f1 = new MyFile())
using(MyFile f2 = new MyFile()) { }

强制资源清理

usgin语句提供了强制清理对象资源的操作方式,允许指定何时释放对象的资源

using(Font f = new Font("",12,FontStyle.Regular))
{
    Graphics g=e.Graphics;
    Rectangle rect=new Rectangle(10,10,200,200);

}//运行结束,自动释放f对象资源

实质:IL代码中,编译器自动将using生成try-finally语句,并在finally块中调用对象的Dispose方法,来清理资源。using只是try。。finally,如果需要catch,只管catch就是了。
注意:实现了IDisposable接口的对象用完了,都要Dispose

Dispose方法用于清理对象封装的非托管资源,而不是释放对象的内存,对象的内存永远是垃圾回收器控制。

posted @ 2018-03-09 09:33  老街深巷的猫没了家  阅读(171)  评论(0)    收藏  举报