实现Dispose但不实现IDisposable背后的推理?

时间:2013-09-10 07:24:03

标签: c# interface idisposable

我现在正在重构一个程序。试图防止内存泄漏当我发现using对象(在TaskDefinition中找到的类)没有调用Microsoft.Win32.TaskScheduler时,我一直在寻找要放在Dispose块中的对象。当我试图将它封闭时,VisualStudio告诉我这个类没有实现IDisosable。看这堂课,这当然是对的:

namespace Microsoft.Win32.TaskScheduler
{
    // Summary:
    //     Defines all the components of a task, such as the task settings, triggers,
    //     actions, and registration information.
    public sealed class TaskDefinition
    {
        ...

        // Summary:
        //     Releases all resources used by this class.
        public void Dispose();
    }
}

那么为什么要实现Dispose方法但不实现IDisposable接口?实现界面有什么缺点吗?

感谢您帮助我理解这一点。

1 个答案:

答案 0 :(得分:3)

来自评论:

根据this page,这是一个在较新版本的程序集中修复的错误。

另外需要注意:IDisposable.Dispose的文档明确要求实现多次支持调用Dispose,因此在其他情况下有效的原因可能是类不支持。在这种情况下,假装实施IDisposable但不满足其要求将比不实施更糟糕。