有关继承IDisposable的详细信息?

时间:2011-05-18 18:27:10

标签: c# idisposable

我的任务是在工作中查看一些旧代码来清理它,我偶然发现了一个类:

public class XMLLayer : Object, IDisposable

首先我发现显式的Object继承是不必要的,但后来我发现dispose方法相当无用:

public void Dispose()
{
    Dispose();
}

using块中没有XMLLayer实例,显式调用Dispose(),或放置在IDisposable变量(多态)中。

我认为Dispose方法的想法是为类添加自己的自定义清理代码是错误的吗?

4 个答案:

答案 0 :(得分:3)

回答你的问题:

  

假设这个想法,我错了   Dispose方法是添加你的   该类拥有自定义清理代码?

请参阅以下问题及其接受的答案:

  

Proper use of the IDisposable interface

答案 1 :(得分:1)

该方法不仅无用 - 它会导致StackOverflowException并在应用程序被调用时终止应用程序(或者只是挂起该线程,如果JIT已经使用了尾部递归)。

XMLLayer中有什么东西看起来像需要一样?当C#是新的时,有些人决定始终实现IDisposable“以防万一”。幸运的是,就我所见,这些日子并没有太多发生。

如果直接或间接拥有非托管资源,则应实施IDisposable - 例如如果有Stream类型的字段。

答案 2 :(得分:1)

这种处置似乎没那么无用,因为它很危险。它会调用自己直到它最终用StackOverflowException

杀死应用程序

Dispose用于清理是正确的。但它主要用于清理非托管资源。这些是.NET甚至不知道存在的资源,因此也不会清理

答案 3 :(得分:0)

不,你没事。如果曾经调用过这个Dispose()方法,那么无论如何它都会永远重复自称,这是一个很好的迹象,它永远不会被使用。