2010-02-17 3 views
13

다른 인터페이스 내에 특정 인터페이스 만 구현하고 싶습니다. 클래스에서 직접 상속받을 수 없도록하고 싶습니다.C# 인터페이스 - 다른 인터페이스의 인터페이스 만 구현합니다.

미리 감사드립니다.

+4

나는 질문을 다시 읽었으며 여전히 예제가 필요하다고 생각한다. – mythz

+1

질문을 다시 읽고, 나는 당신이 클래스의 인터페이스를 직접 구현하지 못하도록하는 몇 가지 구조를 요구하고 있다고 생각한다. 다른 인터페이스가 인터페이스를 상속하는 것을 방지합니다. –

+0

예 : IAnimation이라는 인터페이스가 있는데,이 인터페이스는 INonAnimated 또는 IAnimated 인터페이스를 통해서만 구현하고 싶습니다. 그런 식으로 두 자식 인터페이스는 동일한 기본 규칙을 유지합니다. – Kukks

답변

25

C#에서는이 작업을 수행 할 수 없습니다. 모든 클래스는 액세스 할 수있는 인터페이스를 구현할 수 있습니다.

왜이 작업을 수행 하시겠습니까? 그걸 염두에 인터페이스 상속을 선언 곰 :

public interface InterfaceA {} 
public interface InterfaceB : InterfaceA {} 

을 당신은 아무것도 InterfaceB을 구현하는 것도 InterfaceA을 구현해야한다는 것을 지정하고, 어쨌든 InterfaceA를 구현하는 클래스를 얻을 수 있습니다 있도록.

+0

아,이 경우라고 생각합니다. 정리해 주셔서 감사합니다! – Kukks

+0

공용 인터페이스 InterfaceA 형 {} 공용 인터페이스는 InterfaceB : InterfaceA 형 {} 공용 인터페이스의 InterfaceC 인터페이스 : InterfaceA 형은 {} InterfaceA 형은 [내가] [/ 난]이 그때는 InterfaceB 및 InterfaceC 인터페이스 – Kukks

-1

내가 제안 할 수있는 가장 좋은 방법은 기본 수준 인터페이스를 internal으로 선언하고 별도의 어셈블리에 최상위 및 하위 인터페이스를 넣고이 인터페이스를 public으로 확장하는 것입니다.

+0

에 사용하는 것이 규칙 일반적인가 개최 것 슈퍼 인터페이스가 구현 클래스에 액세스 할 수없는 경우 최상위 레벨 인터페이스를 실제로 구현할 수 있습니까? – thecoop

+0

다음과 같은 결과가 나타납니다.'일관성없는 접근성 : 기본 인터페이스 'IBaseInterface'는 'IDescendantOfBaseInterface'인터페이스보다 액세스하기가 쉽지 않습니다. C# 4.0. –

1

우선, 인터페이스가 아무 것도 구현할 수 없기 때문에 "다른 인터페이스 내에서 구현"이라고 말하는 것이 타당하지 않습니다.

나는 이것을하는 두 가지 결함있는 방법을 볼 수 있습니다.

  1. IAnimation을 구현하는 애니메이션 및 비 애니메이션 추상 클래스를 만듭니다. 그 아래의 콘크리트 클래스는 여전히 강제 new 연산자로 IAnimation 방법을 재정의 할 수

    class SomeAnim : Animated 
    { 
        public new void Foo() { } 
    } 
    
  2. 사용이나 mixin을. IAnimated 및 INonAnimated는 인터페이스로 유지하지만 인터페이스에는 메소드를 넣지 마십시오. 대신이 같은 확장 메서드를 정의 다시

    static class Ext 
    { 
        public static void Foo(this IAnim anim) 
        { 
         if (anim is IAnimated) // do something 
         else if (anim is INonAnimated) // do something else 
        } 
    } 
    

, 해킹의 약간. 그러나 당신이하려고하는 것은 어쨌든 디자인 결함을 나타냅니다.

+0

코드 서식을 다시 지정하려면 다음을 참조하십시오. http://meta.stackexchange.com/questions/19624/bug-in-markdown-formatter/19799#19799 4 개의 문자가 필요합니다. – thecoop

+0

감사합니다. 그게 언제 변했어? – Tesserex