IDisposable和多继承

时间:2014-09-01 13:24:01

标签: c# idisposable

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

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

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

外部图书馆有:

public interface IModbusMaster:IDisposable

公共抽象类ModbusDevice:IDisposable

我的代码使用:

公共抽象类ModbusMaster:ModbusDevice,IModbusMaster

由于

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

您无法从C#中的多个类继承,因此您必须使用Delegation Pattern对此进行编码。

你应该继承自A(is-a)和"有" (has-a)B的实例:

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);
    }

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

显然,这还伴随着您必须解决的许多其他同步和管理问题。

答案 2 :(得分:0)

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

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

public class MyClass : BaseClassFromLibrary
{
    public override void Dispose()
    {
    }
}
相关问题