gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:05:14 30 4
gpt4 key购买 nike

比如说,我有自己的 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 中使用。

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

您所说的析构函数更广为人知的是 Finalizer

下面是您将如何使用 IDisposable。请注意,不会自动调用 Dispose();你能做的最好的事情就是使用 using,这 会导致 Dispose() 被调用,即使 中有异常>在到达末尾之前使用 block 。

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 的唯一目的是在执行出于任何原因离开 using block 时自动调用 .Dispose()

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

基本上,上面的 using block 等同于:

MyClass c = new MyClass();

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

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

关于c# - .NET 中的 C# 类何时调用析构函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17270312/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com