加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

析构函数何时在ASP.NET中调用C#类?

发布时间:2020-12-15 19:00:20 所属栏目:asp.Net 来源:网络整理
导读:说,我有自己定义的C#类: public class MyClass{ public MyClass() { //Do the work } ~MyClass() { //Destructor }} 然后我从ASP.NET项目创建我的类的实例,如下所示: if(true){ MyClass c = new MyClass(); //Do some work with 'c' //Shouldn't destructo
说,我有自己定义的C#类:
public class MyClass
{
    public MyClass()
    {
        //Do the work
    }
    ~MyClass()
    {
        //Destructor
    }
}

然后我从ASP.NET项目创建我的类的实例,如下所示:

if(true)
{
    MyClass c = new MyClass();
    //Do some work with 'c'

    //Shouldn't destructor for 'c' be called here?
}

//Continue on

我希望在if范围的末尾调用析构函数,但它永远不会被调用.我错过了什么?

解决方法

等价于C析构函数的是IDisposable和Dispose()方法,通常在using块中使用.

见http://msdn.microsoft.com/en-us/library/system.idisposable.aspx

你所谓的析构函数更好地称为终结器.

以下是使用IDisposable的方法.请注意,不会自动调用Dispose();您可以做的最好的事情就是使用using会导致调用Dispose(),即使在使用块到达结尾之前有异常.

public class MyClass: IDisposable
{
    public MyClass()
    {
        //Do the work
    }

    public void Dispose()
    {
        // Clean stuff up.
    }
}

然后你可以像这样使用它:

using (MyClass c = new MyClass())
{
    // Do some work with 'C'
    // Even if there is an exception,c.Dispose() will be called before
    // the 'using' block is exited.
}

如果需要,您可以自己显式调用.Dispose().唯一的用途是当执行因任何原因离开using块时自动调用.Dispose().

有关详细信息,请参阅此处:http://msdn.microsoft.com/en-us/library/yh598w02%28v=vs.110%29.aspx

基本上,上面的使用块相当于:

MyClass c = new MyClass();

try
{
    // Do some work with 'C'
}

finally
{
    if (c != null)
        ((IDisposable)c).Dispose();
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读