我现在正在重构一个程序。试图防止内存泄漏当我发现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
接口?实现界面有什么缺点吗?
感谢您帮助我理解这一点。
答案 0 :(得分:3)
来自评论:
根据this page,这是一个在较新版本的程序集中修复的错误。
另外需要注意:IDisposable.Dispose
的文档明确要求实现多次支持调用Dispose
,因此在其他情况下有效的原因可能是类不支持。在这种情况下,假装实施IDisposable
但不满足其要求将比不实施更糟糕。