C#中using有三种用法:
1. 引入命名空间
2. 创建别名
3. 定义范围,强制资源清理
下面从这三个角度来谈谈using的应用。
(1)引入命名空间:using + 空间名,类似于java的import,C++的include。命名空间是一种避免类名冲突的方法,用于将不同的数据类型组合划分的方式。例如,在.NET中
很多的基本类型都位于System命名空间,数据操作类型位于System.Data命名空间。
(2)创建别名:using + 别名 = 包括详细命名空间信息的具体类型。当两个不同的命名空间中都包含了一个相同名字的类型,则在使用该类型时需要加上详细的命名空间来区别。通过using创建别名可以避免该问题。
using System; using aClass = NameSpace1.MyClass; using bClass = NameSpace2.MyClass; namespace NameSpace1 { public class MyClass { public override string ToString() { return "You are in NameSpace1.MyClass"; } } } namespace NameSpace2 { class MyClass { public override string ToString() { return "You are in NameSpace2.MyClass"; } } } namespace testUsing { using NameSpace1; using NameSpace2; class Class1 { static void Main(string[] args) { aClass my1 = new aClass(); Console.WriteLine(my1); bClass my2 = new bClass(); Console.WriteLine(my2); Console.WriteLine("Press any key"); Console.Read(); } } }
(3)定义范围,在范围结束后清理资源:using语句提供了一个脉络清晰的机制来控制资源的生存期,创建的对象会在using语句结束时被摧毁,以下代码说明了using的机制:
using(TextReader reader=new StreamReader(filename))
{
string line;
while((line=read.ReadLine())!=null)
{
Console.WriteLine(line);
}
}
等价于:
{
TextReader reader=new StreamReader(filename);
try
{
string line;
while((line=read.ReadLine())!=null)
{
Console.WriteLine(line);
}
}
finally
{
if(reader!=null)
{
(IDisposible)reader.Dispose();
}
}
}
using是在出了作用域以后调用Dispose方法,在Dispose方法内部会自动调用Close方法。