다른 인터페이스가 이미 상속하는 인터페이스를 다시 구현합니다
-
05-07-2019 - |
문제
나는 이런 것들을 많이 본다 :
interface A { ... }
interface B : A { ... }
class C : B, A { ...}
B가 이미 상속 될 때 C가 인터페이스 A를 구현하도록 지정하는 이유는 무엇입니까? 의미 론적 차이를 만들거나 스타일의 문제입니까?
(많은 예 중 하나는입니다 List<T>
구현 IList<T>
그리고 ICollection<T>
, 동안 IList<T>
또한 파생됩니다 ICollection<T>
).
업데이트: 의미 론적 차이를 만들지 않는다는 추측을 확인해 주셔서 감사합니다.
나는 그것이 어디에서 관련 상황을 생각해 냈다. 하다 상속 트리에 이미있는 인터페이스를 명시 적으로 이름을 지정하기 위해 차이를 만듭니다.
만약에 B
수업이었고 C
인터페이스 멤버 만 구현합니다 A
이름이 있다면 A
명시 적으로 ':
'.
편집] 명시 적으로 구현 된 인터페이스 멤버와의 혼란을 피하기 위해 질문의 문구를 변경하여 객체가 인터페이스로 캐스팅되는 경우 멤버의 사용을 제한합니다.
해결책
나는 이것이 단지 스타일의 문제라고 생각합니다. 예를 들어, 프레임 워크/라이브러리 클래스를 볼 때 특히 중요합니다. 예를 들어, 개발자가 실제로 ILIST가 실제로 ICollection이라는 것을 알지 못하고이 클래스를 iCollection 또는 ILIST로 취급 할 수 있다는 아이디어를 강조합니다.
기능적 파급 효과가 없습니다. 구체적으로,이 코드는 'C'를 명시 적으로 구현하는지 여부를 컴파일 할 것입니다.
namespace DotNetInterfaceTest {
class Program {
static void Main(string[] args) {
A c = new C();
}
}
interface A {
void foo();
}
interface B : A {
void bar();
}
class C : B {
public void bar() {}
public void foo() {}
}
}
제휴하지 않습니다 StackOverflow