熟悉C++的人看到using就想到引用命名空间,当然在C#中也一样。
但同时C#中的using比C++中的多了两项功能,下面详细说明。
第一种用法:using + 命名空间
这种用法跟C++的一样,引用一个命名空间,这样在程序里就可以直接引用命名空间里的类型,而不用详细指定其完整路径。
例如:using System;
这样当调用System.Write()时就可以直接写Write()就可以了。
第二种用法: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;
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
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();
}
}
}
第三种用法:
using (Class1 c = new Class1())
{
// 代码段
}
用于强制资源清理,清理非托管资源,不受GC控制的资源。Using结束后会隐式的调用Disposable方法。
当在某个代码段中使用了类的实例,而希望无论因为什么原因,只要离开了这个代码段就自动调用这个类实例的Dispose。要达到这样的目的,用try...catch来捕捉异常也是可以的,但用using也很方便。但是要注意,当对象使用using关键字的时候,必须实现IDisposable接口。
上面语句相当于:
Class1 c = new Class1();
try
{
// 执行代码
}
catch()
{
// 异常处理
}
finally
{
c.Disposable();
}
使用using的一个例子:
class C : IDisposable
{
public void UseLimitedResource()
{
Console.WriteLine("Using limited resource...");
}
void IDisposable.Dispose()
{
Console.WriteLine("Disposing limited resource.");
}
}
class Program
{
static void Main()
{
using (C c = new C())
{
c.UseLimitedResource();
}
Console.WriteLine("Now outside using statement.");
Console.ReadLine();
}
}