c# - 实现没有 CA 警告的继承 IDisposable 模式

标签 c# .net idisposable

我正在处理以下案例。我有一个具有 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/

相关文章:

c# - 多次实例化类的性能问题

c# - 如何保持循环法

.net - 带有动态参数的 ChannelFactory 错误

c# - 使用.net core时应该如何存储 Entity Framework 6连接字符串

c# - 一次性注册表 : good pattern?

c# - 为什么在使用 MSpec/Moq 测试此异步方法时会出现 NullReferenceException?

c# - 如何将我的 .net WinForms 应用程序转换为 Windows 10 Mobile?

c# - 编写我们自己的 Dispose 方法而不是使用 Idisposable

c# - 如果实例已被处置,则在不调用 EndXXX 的情况下调用 BeginXXX 是否安全

c# - 处理锁定数据库的 SQLite 异常