2016-08-25 4 views
-1

다음 코드는 나에게인터페이스 상속 이해할 수없는

오류 2 유형 'Series.AB가'이미 내가 생각

interface IA 
{ 
    void A(); 
} 
interface IB 
{ 
    void B(); 
} 

interface IAB : IA, IB 
{ 
    void A(); 
    void B(); 
} 

class AB : IAB 
{ 
    IA A; 
    IB B; 
    public AB(IA _a, IB _b) 
    { 
     A = _a; 
     B = _b; 
    } 

    public void A() 
    { 
     throw new NotImplementedException(); 
    } 

    public void B() 
    { 
     throw new NotImplementedException(); 
    } 
} 

'B'에 대한 정의가 포함되어 오류를 줄 AB 클래스 인스턴스를 다음과 같이 사용할 수 있습니다.

IA A = 새 AB(); 또는 IB B = 새로운 AB(); 또는 IAB ab = 새 AB();

여기서 일어나는 일을 이해할 수 없습니다. 누구든지이 예외가 발생하는 이유를 설명하십시오.

+4

추적 할 수없는 가망 중복 : http://stackoverflow.com/questions/2371178/inheritance-from-multiple-interfaces-with-the-same-method-name – Rumpelstinsk

+2

이 오류는 정말 인터페이스 및 상속 관련이 없습니다. 같은 이름의 메소드와 필드가 있습니다. 'B'는 필드와 메소드의 이름입니다 ('A'도 마찬가지입니다). 그건 허용되지 않습니다. –

+1

찾을 수있는 가장 가까운 복제본 : [이미 정의가 포함되어 있습니다] (http://stackoverflow.com/questions/13770014/already-contains-a-definition-forget-set-method). 어느 쪽의 질문이라도 OP는 그것이 다른 것이라고 생각한다. – Sinatr

답변

1

동일한 이름의 메소드 이름을 사용하므로 속성 이름을 A 및 B가 아닌 다른 값으로 변경하십시오. 또한 클래스 AB에 기본 생성자가 있습니다. 의

class AB : IAB 
{ 
    IA instanceA; 
    IB instanceB; 
    public AB(IA _a, IB _b) 
    { 
     instanceA = _a; 
     instanceB = _b; 
    } 

    public void A() 
    { 
     throw new NotImplementedException(); 
    } 

    public void B() 
    { 
     throw new NotImplementedException(); 
    } 
}