c#里using除了引用程序集,例如:
using System; using System.Collections.Generic;
还有1个重要的用法:
我们都知道system.object里有Finalize()是虚函数,在GC进行垃圾回收的时候用到,一般我们都不用自己显示的清理逻辑,但是只是一般情况下,自然就想到了override Finalize()。
{ protected override Finalize() { //do something } }
但是c#不允许这样做,很奇怪。我们只能增加析构函数:
class a { ~a() { Console.WriteLine("I am dead!"); } }
更有一种情况,如果你的类类型是可处置的,也就是支持IDisposable接口时,可以调用Dispose()。
class a : IDisposable
{
public void Dispose()
{
//清楚非托管资源。。。。
// and something else
}
}
当然最好判断下目前类型是否支持IDisposable
。。。。 if (a is IDisposable) a.Dispose();
在处理实现了IDisposable时我们一般使用结构化的异常处理来保证Dispose()调用:
try { //使用a成员 } finally { a.Dispose(); }
显然这样做要把每个可处置的类型包含在try/finally里,不是很让人接受,于是就有了using的另一用途:
using(a mya=new a()) { //使用mya对象 }
虽然在CIL代码里还是try/finally,但我们的代码编写和阅读更让人接受。