Using的重要性对于c#来说,就等同于java中的关键字import。但是在c#中,using其实拥有多种功能。
1. 引用命名空间
使用方法:using namespace;
Namespace是所要引入的命名空间的名称。
2. 创建别名
使用方法:Using alias=type| namespace
Alias 是用来表示命名空间或类型的用户定义符号。
Type 是通过 alias 表示的类型。
Example:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; //using指令的第1个用途
using alias =TestOfUsing2.Class1;//using指令的第2个用途
namespace TestOfUsing1
{
class Program
{
static void Main(string[] args)
{
alias obj = new alias(); ;
obj.display();
}
}
}
namespace TestOfUsing2
{
public class Class1
{
publicvoid display()
{
Console.WriteLine("This is Class1");
}
}
}
3. 强制资源清理
Using(){}可以为某个类型的对象定义一个范围,该对象只在范围内可以被访问,而在范围之外,就不能被访问了。在此范围的末尾将释放该对象,也就是通过隐式的调用接口IDisposable的Dispose()方法来释放非托管资源。所以被清理的对象必须已经实现了IDisposable接口,不然在调试的时候就会报错,更谈不上什么清理资源了。
在此有必要简单的介绍一下什么是非托管资源:
C#中的资源分成托管资源和非托管资源。由CLR管理分配和释放的内存资源叫做托管资源,托管资源的清理由GC自动处理,并不需要开发者进行编码实现。那些不受CLR管理的内存资源就称为非托管资源,比如文件、数据库连接、套接字、COM对象等,这些对象都包含非托管资源。如果我们使用了非托管资源,那么就需要在程序中释放这些资源。
需要指出的是:Dispose()方法并非只能用来释放非托管资源,事实上,它不但可以释放非托管资源,也可以释放托管资源。
使用方法:
using (Class1 c = new Class1())
{ //your code }
Example:
using (FileStreamfs1 = new FileStream("c:\\html.txt", FileMode.Create),fs2 = new FileStream("c:\\note.txt", FileMode.Create))
{
using(StreamWriter sw1 = newStreamWriter(fs1), sw2 = new StreamWriter(fs2))
{
sw1.WriteLine(DateTime.Now.Day);
sw1.Flush();
sw2.WriteLine(DateTime.Now.Hour);
sw2.Flush();
}
}
从上面的例子可以看出,using是可以嵌套的;并且可以在using()中定义多个对象,但这些对象必须是同一类型的。