在C#方法中使用using的意义

在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())
            {
            }
            Console.WriteLine("1");
        }
    }

C#输出:

A construct

B construct

B dispose(因为override了,否则都是只调用A的析构)

C++:

#include<vector>
#include<algorithm>
#include<cstring>

using namespace std;

class A
{
public :
	A()
	{
		cout << "A construct" << endl;
	}
	virtual ~A()
	{
		cout << "A Dispose" << endl;
	}
};

class B : public A
{
public:
	B()
	{
		cout << "B construct" << endl;
	}
	~B()
	{
		cout << "B Dispose" << endl;
	}
};


int main()
{
	A* a = new B();
	delete a;
}

C++输出:

A construct

B construct

B dispose

A dispose

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页