我正在使用第三方类库。这实现了实现IDisposable的A类和实现IDisposable的接口B.
我有一个类需要继承自A类和实现接口B.如果进行Visual Studio代码分析,它会报告我没有正确实现IDisposable并从接口列表中删除IDisposable。
鉴于我不能改变A或B以及他们都需要处理IDisposable的事实。有没有推荐的处理方法或者我只是忽略这个。
外部图书馆有:
public interface IModbusMaster:IDisposable
公共抽象类ModbusDevice:IDisposable
我的代码使用:
公共抽象类ModbusMaster:ModbusDevice,IModbusMaster
由于
答案 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()
{
}
}