我正在处理以下案例。我有一个具有 IDisposable 模式的基类,这意味着它具有 public virtual Dispose()
方法和 protected virtual Dispose(bool)
方法。但是我无法以不会收到任何 CA 警告的方式在派生类中实现此模式。请考虑以下示例:
public class UtilizeClass : IDisposable
{
private MyData data;
public UtilizeClass()
{
data = new MyData();
}
public void Dispose()
{
data.Dispose(); // Cannot use Dispose(bool) because it is protected.
}
}
public class MyData : Base, IDisposable
{
// Here we have some managed resources that must be disposed.
// How to implement the pattern?
}
public class Base : IDisposable
{
public virtual void Dispose() { }
protected virtual void Dispose(bool disposing) { }
}
我一直在 MyData
类中收到相互矛盾的 CA 警告。例如:删除 Dispose() 并将其逻辑移动到 Dispose(bool)。
非常感谢您的回答和帮助。
最佳答案
你的基类不应该有 void Dispose()
是虚拟的,它应该被实现并调用虚拟 void Dispose(bool disposing)
作为它实现的一部分.
有关更多详细信息和更清晰的替代 API,请查看:
http://haacked.com/archive/2005/11/18/acloserlookatdisposepattern.aspx
关于c# - 实现没有 CA 警告的继承 IDisposable 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11795903/