2014-09-01 5 views
1

제 3 자 클래스 라이브러리를 사용하고 있습니다. 이것은 IDisposable을 구현하는 클래스 A와 IDisposable을 구현하는 인터페이스 B를 구현합니다.IDisposable and multiple-inheritance

클래스 A와 인터페이스 B에서 상속해야하는 클래스가 있습니다. Visual Studio 코드 분석을 수행하면 IDisposable을 올바르게 구현하지 못하고 인터페이스 목록에서 IDisposable을 제거한다고보고합니다.

나는 A 나 B를 변경할 수 없다는 점을 감안할 때 그들은 둘 다 IDisposable을 처리해야한다는 사실을 감안할 때. 이 문제를 처리하거나이 문제를 무시하는 것이 좋습니다.

외부 라이브러리가 있습니다

공용 인터페이스의 IModbusMaster :는 IDisposable

공공 추상 클래스 ModbusDevice :는 IDisposable

내 코드를 사용합니다 :

공공 추상 클래스 ModbusMaster : ModbusDevice, IModbusMaster

감사합니다.

+0

둘 다에서 상속해야하는 이유는 무엇입니까? 제 3 자 라이브러리가 절대 필요가 없도록 자신의 모델을 설정하기를 바랍니다. – Sayse

+1

질문은 C#에서 다중 상속을 수행하는 방법입니다. – Beatles1692

+0

Btw - 두 클래스 모두에서 상속받을 수 없습니다. –

답변

0

C#에서는 여러 클래스를 상속받을 수 없으므로 Delegation Pattern으로 코드를 수정해야합니다.

당신은 A (IS-A)에서 상속 "이"해야한다 (이-A) B의 예 :

: 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의 인스턴스에 위임

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

이것은 하나 이상의 클래스의 동작을 혼합하고 다중 상속을 모방 할 수있는 유일한 기회입니다.

물론, 여기에는 많은 동기화 및 관리 문제가 있습니다.

+0

질문이 변경되었습니다. 실제 다중 상속이 아닙니다. –

+0

죄송합니다. 클래스와 인터페이스가 있습니다. – user3997323

+0

좋아, 나중에 제거하겠습니다.임의의 방문자에게 유용하다면 떠나야하는 것이 좋습니다. – pid

0

A가 클래스이고 IDisposable을 구현하는 경우 Dispose 메서드를 제공해야합니다. 여기

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

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