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

2023-11-21

比如说,我有自己的 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++ 析构函数等效的是IDisposableDispose()方法,常用于using block.

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

你所谓的析构函数更广为人知的是Finalizer.

以下是如何使用 IDisposable。注意Dispose()不会自动调用;你能做的最好的就是使用using which will cause Dispose()被调用,即使存在异常using在到达末尾之前阻塞。

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()当执行离开using以任何理由阻止。

请参阅此处了解更多信息:http://msdn.microsoft.com/en-us/library/yh598w02%28v=vs.110%29.aspx

基本上,using上面的块相当于:

MyClass c = new MyClass();

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

finally
{
    if (c != null)
        ((IDisposable)c).Dispose();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.NET 中的 C# 类何时调用析构函数? 的相关文章

随机推荐