ASP.NET中的C#类什么时候调用析构函数?比如说,我有自己的C#类定义如下:publicclassMyClass{publicMyClass(){//Dothework}~MyClass(){//Destructor}}然后我从ASP.NET项目,像这样:if(true){MyClassc=newMyClass();//用'c'做一些工作//不应该在这里调用'c'的析构函数吗?}//Continueon我希望如果析构函数在范围的末尾被调用,但它永远不会被调用。我错过了什么?与C++析构函数等效的是IDisposable和Dispose()方法,通常在using块中。请参阅http://msdn.microsoft.com/en-us/library/system.idisposable.aspx你所说的析构函数最好称为终结器。下面介绍如何使用IDisposable。请注意,不会自动调用Dispose();您可以做的最好的事情是使用use,这将导致调用Dispose(),即使在using块到达末尾之前出现异常也是如此。publicclassMyClass:IDisposable{publicMyClass(){//完成工作}publicvoidDispose(){//清理东西。}}然后你可以这样使用它:using(MyClassc=newMyClass()){//Dosomeworkwith'C'//即使有异常,c.Dispose()也会在//之前被调用退出“使用”块。}您可以显式调用.Dispose()。唯一的.Dispose()是当执行出于任何原因离开using块时自动调用.Dispose()。有关详细信息,请参见此处:http://msdn.microsoft.com/en-us/library/yh598w02%28v=vs.110%29.aspx基本上,上面的using块等同于:MyClassc=newMyClass();try{//使用'C'做一些工作}finally{if(c!=null)((IDisposable)c).Dispose();您无法控制时间或猜测对象实际析构函数的时间。这一切都取决于垃圾收集器。在这种情况下唯一的想法是,您可以确定当您离开该范围时,对象c将变得不可访问(我假设在范围内没有对实例的全局引用),因此实例c旨在被识别并成为时机成熟时由垃圾收集器删除。何时释放对象由垃圾收集器决定。但是,您可以通过调用Finalize强制释放对象。或GC.Collect将强制垃圾收集器采取行动。以上是C#学习教程:ASP.NET中C#类的析构函数什么时候调用?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
