【问题标题】:IDisposable and multiple-inheritanceIDisposable 和多重继承
【发布时间】:2014-09-01 13:24:01
【问题描述】:

我正在使用第三方类库。这实现了实现 IDisposable 的类 A 和也实现 IDisposable 的接口 B。

我有一个需要从类 A 继承并实现接口 B 的类。如果进行 Visual Studio 代码分析,它会报告我没有正确实现 IDisposable 并从接口列表中删除 IDisposable。

鉴于我无法更改 A 或 B 以及它们都需要处理 IDisposable 的事实。有没有推荐的方法来处理这个或者我只是忽略这个。

外部库有:

公共接口 IModbusMaster : IDisposable

公共抽象类 ModbusDevice : IDisposable

我的代码使用:

公共抽象类 ModbusMaster : ModbusDevice, IModbusMaster

谢谢

【问题讨论】:

  • 我能问一下为什么你需要从两者继承吗?我希望第 3 方库设置他们的模型,这样就不需要了
  • 问题是如何在 C# 中进行多重继承?
  • 顺便说一句 - 你不能从两个类继承。
  • .NET 无法实现多重继承。您可以实现多个接口,但不能从多个类继承
  • 请添加简单的例子你在做什么

标签: c# idisposable


【解决方案1】:

在这里发现了一个类似的问题,意味着可以抑制一个误报。

Code Analysis CA1063 fires when deriving from IDisposable and providing implementation in base class

【讨论】:

    【解决方案2】:

    您不能从 C# 中的多个类继承,因此您必须使用 Delegation Pattern 编写代码。

    您应该从 B 的 A (is-a) 和“拥有” (has-a) 实例继承:

    class MyClass extends A
    {
        private B instance_of_b;
    
        public MyClass(B instance_of_b) // constructor
        {
            this.instance_of_b = instance_of_b;
            ...
    

    然后将 B 中的方法委托给 b 的实例:

        public double MethodInB(int arg1, string arg2)
        {
            return instance_of_b.MethodInB(arg1, arg2);
        }
    

    这是您混合多个类的行为并模仿多继承的唯一机会。

    显然,这会带来许多您必须解决的其他同步和管理问题。

    【讨论】:

    • 问题已更改。这不是实际的多重继承。
    • 对不起,我有一个类和一个接口
    • 好的,也许我稍后会删除它。如果它对一些随机访问者有用,最好离开它。
    【解决方案3】:

    如果 A 是一个类,并且它实现 IDisposable,它必须提供一个 Dispose 方法。然而,它可以提供一个抽象定义(如果类本身被标记为抽象),这意味着当您从该类继承时必须覆盖该 Dispose 方法:

    public abstract class BaseClassFromLibrary : IDisposable
    {
        public abstract void Dispose();
    }
    
    public class MyClass : BaseClassFromLibrary
    {
        public override void Dispose()
        {
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-30
      • 2011-12-02
      • 2021-06-25
      • 2014-10-04
      • 2015-06-26
      相关资源
      最近更新 更多