在C#函数方法体中使用using,表明一个类只能在当前方法体中存在,出了方法体就会调用该函数的析构函数。
但是该类必须实现了IDisposable接口,并且除非该类的析构函数定义为虚函数且子类重写了,否则都只会调用该类的析构函数,并不会像C++释放全部内存,依然还是要CLR去管理。
与C++基类定义为虚函数了,子类析构则自动调用子类析构再父类析构不同,C++基类析构定义为虚函数则是后绑定,动态联编,会释放全部内存。
C#:
class A : IDisposable
{
public A()
{
Console.WriteLine("A Construction");
}
public virtual void Dispose()
{
Console.WriteLine("A is Dispose");
}
}
class B : A
{
public B()
{
Console.WriteLine("B Construction");
}
public override void Dispose()
{
Console.WriteLine("B is Dispose");
}
}
class Program
{
static void Main(string[] args)
{
using (A a = new B())
{