c00*_*0fd 7 .net c# asp.net destructor
说,我有自己定义的C#类:
public class MyClass
{
public MyClass()
{
//Do the work
}
~MyClass()
{
//Destructor
}
}
Run Code Online (Sandbox Code Playgroud)
然后我从ASP.NET项目创建我的类的实例,如下所示:
if(true)
{
MyClass c = new MyClass();
//Do some work with 'c'
//Shouldn't destructor for 'c' be called here?
}
//Continue on
Run Code Online (Sandbox Code Playgroud)
我希望在if范围的末尾调用析构函数,但它永远不会被调用.我错过了什么?
等效于C++析构函数IDisposable的Dispose()方法和方法通常在using块中使用.
请参阅http://msdn.microsoft.com/en-us/library/system.idisposable.aspx
你称之为析构函数的东西更为人所知Finalizer.
以下是使用IDisposable的方法.请注意,Dispose()不会自动调用; 您可以做的最好的事情是使用using哪个将导致Dispose()被调用,即使using块在到达结束之前有异常.
public class MyClass: IDisposable
{
public MyClass()
{
//Do the work
}
public void Dispose()
{
// Clean stuff up.
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样使用它:
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.
}
Run Code Online (Sandbox Code Playgroud)
.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();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9725 次 |
| 最近记录: |