.Net基础知识和C#语法(5):小谈using关键字
时间:2010-11-17 来源:A.Lu
1,引入命名空间
2,创建命名空间别名
3,强制清理资源
在说明其三种用法之间,我觉得有必要将命名空间的概念来阐述一下
命名空间(namespace): 它是.Net程序在逻辑上的组织结构,而不是实际的物理结构。它是一种避免类名冲突的方法,用于将不同的数据类型组合划分的方式。
以下摘自MSDN:
Within a namespace, you can declare one or more of the following types: another namespace、class、interface、struct、enum、delegate。
意思就是说我们可以在namespace 中的定义一下内容:其它的命名空间、类、接口、结构、枚举、委托
在大致明白了命名空间后让我们用一些示例来分别把这三种用法来展现一下:
引入命名空间
引入命名空间是using我们最常用的用法了,最常见的就是在程序文件的开头引入System空间,从而导入最基本的常用操作。
using System; //using Namespace
有几个需要注意的问题:
1,并不是在程序中引入的命名空间都会编译到程序集中。如果代码中并没有使用到此命名空间的程序集,则在编译时并不加载此命名空间。
2,using子句一般是放在C#源文件的开头,但这不是必须的。但是必须在调用前引入其命名空间。
创建命名空间
创建命名空间也很好理解,类似于sql语句中的as别名,举个例子大家就明白了:
using MyNamespace = System.Data.SqlClient; class Test { MyNamespace.SqlTransaction = new MyNamespace.SqlTransaction(); }
强制资源清理
首先需要说明的是Dispose模式,它是.Net一种显示清理对象资源的方式。对象继承了IDisposable接口后,会拥有一个公有的Dispose()方法。Dispose方法用于清理对象封装的非托管资源,而不是释放对象内存。
using 语句提供了调用DIspose方法的快捷方式,可以在指定时间释放对象资源,看下面这个例子:
using(Font f = new Font("Verdana",12,FontStyle.Regual)) { //执行代码块 Graphics g = e.Graphics; Rectangle rect = new Rectangle(10,10,200,200); g.DrawString() }//运行结束,释放f对象资源
其代码实际上是调用了一个try…catch…finally语句块,在finally语句块中调用了f的Dispose()方法,这样就容易理解了吧。
但是还有几点需要注意:
1,这种方法只适用于实现了IDisposable接口的类型,否则会出现编译错误。
2,using语句支持初始化多个变量,但类型必须相同。
using(Pen p1 = new Pen(),p2 = new Pen()) { //代码块 } //更灵活的一种方法 using(IDisposable p1 = new Pen(),p2 = new Font()) { //因为能使用using语句的都是实现了IDisposeable接口的方法,所以可以这样定义。 } //顺便提一个其它定义方法,using中的对象可以提前定义 Font f = new Font(“微软雅黑”,9,FontStyle.Regular); using(f) { //代码块 }