实现“释放”但不实现“ID”背后的原因

本文关键字:实现 背后 释放 ID | 更新日期: 2023-09-27 18:30:49

我现在正在重构一个程序。为了防止内存泄漏,当我找到一个未调用DisposeTaskDefinition对象(在 Microsoft.Win32.TaskScheduler 中找到的类)时,我正在寻找要包含在using块中的对象。当我试图封装它时,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接口呢?实现接口有什么缺点吗?

谢谢你帮助我理解这一点。

实现“释放”但不实现“ID”背后的原因

从评论:

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

但是,还有一个注意事项:IDisposable.Dispose的文档明确要求实现支持多次调用Dispose,因此在其他情况下,一个正当的原因可能是该类不支持该类。在这种情况下,假装实现IDisposable但不满足其要求将比不实施它更糟糕。