我的任务是在工作中查看一些旧代码来清理它,我偶然发现了一个类:
public class XMLLayer : Object, IDisposable
首先我发现显式的Object继承是不必要的,但后来我发现dispose方法相当无用:
public void Dispose()
{
Dispose();
}
using
块中没有XMLLayer实例,显式调用Dispose()
,或放置在IDisposable
变量(多态)中。
我认为Dispose方法的想法是为类添加自己的自定义清理代码是错误的吗?
答案 0 :(得分:3)
回答你的问题:
假设这个想法,我错了 Dispose方法是添加你的 该类拥有自定义清理代码?
请参阅以下问题及其接受的答案:
答案 1 :(得分:1)
该方法不仅无用 - 它会导致StackOverflowException
并在应用程序被调用时终止应用程序(或者只是挂起该线程,如果JIT已经使用了尾部递归)。
XMLLayer
中有什么东西看起来像需要一样?当C#是新的时,有些人决定始终实现IDisposable
“以防万一”。幸运的是,就我所见,这些日子并没有太多发生。
如果直接或间接拥有非托管资源,则应实施IDisposable
- 例如如果有Stream
类型的字段。
答案 2 :(得分:1)
这种处置似乎没那么无用,因为它很危险。它会调用自己直到它最终用StackOverflowException
Dispose
用于清理是正确的。但它主要用于清理非托管资源。这些是.NET甚至不知道存在的资源,因此也不会清理
答案 3 :(得分:0)
不,你没事。如果曾经调用过这个Dispose()
方法,那么无论如何它都会永远重复自称,这是一个很好的迹象,它永远不会被使用。