比如说,我有自己的 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
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(使用前将#替换为@)