说,我有自己定义的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
解决方法
等价于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(); }