实现“释放”但不实现“ID”背后的原因
本文关键字:实现 背后 释放 ID | 更新日期: 2023-09-27 18:30:49
我现在正在重构一个程序。为了防止内存泄漏,当我找到一个未调用Dispose
的TaskDefinition
对象(在 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
接口呢?实现接口有什么缺点吗?
谢谢你帮助我理解这一点。
从评论:
根据此页面,这是一个在较新版本的程序集中修复的错误。
但是,还有一个注意事项:IDisposable.Dispose
的文档明确要求实现支持多次调用Dispose
,因此在其他情况下,一个正当的原因可能是该类不支持该类。在这种情况下,假装实现IDisposable
但不满足其要求将比不实施它更糟糕。