다른 인터페이스 내에 특정 인터페이스 만 구현하고 싶습니다. 클래스에서 직접 상속받을 수 없도록하고 싶습니다.C# 인터페이스 - 다른 인터페이스의 인터페이스 만 구현합니다.
미리 감사드립니다.
다른 인터페이스 내에 특정 인터페이스 만 구현하고 싶습니다. 클래스에서 직접 상속받을 수 없도록하고 싶습니다.C# 인터페이스 - 다른 인터페이스의 인터페이스 만 구현합니다.
미리 감사드립니다.
C#에서는이 작업을 수행 할 수 없습니다. 모든 클래스는 액세스 할 수있는 인터페이스를 구현할 수 있습니다.
왜이 작업을 수행 하시겠습니까? 그걸 염두에 인터페이스 상속을 선언 곰 :
public interface InterfaceA {}
public interface InterfaceB : InterfaceA {}
을 당신은 아무것도 InterfaceB
을 구현하는 것도 InterfaceA
을 구현해야한다는 것을 지정하고, 어쨌든 InterfaceA
를 구현하는 클래스를 얻을 수 있습니다 있도록.
내가 제안 할 수있는 가장 좋은 방법은 기본 수준 인터페이스를 internal
으로 선언하고 별도의 어셈블리에 최상위 및 하위 인터페이스를 넣고이 인터페이스를 public
으로 확장하는 것입니다.
에 사용하는 것이 규칙 일반적인가 개최 것 슈퍼 인터페이스가 구현 클래스에 액세스 할 수없는 경우 최상위 레벨 인터페이스를 실제로 구현할 수 있습니까? – thecoop
다음과 같은 결과가 나타납니다.'일관성없는 접근성 : 기본 인터페이스 'IBaseInterface'는 'IDescendantOfBaseInterface'인터페이스보다 액세스하기가 쉽지 않습니다. C# 4.0. –
우선, 인터페이스가 아무 것도 구현할 수 없기 때문에 "다른 인터페이스 내에서 구현"이라고 말하는 것이 타당하지 않습니다.
나는 이것을하는 두 가지 결함있는 방법을 볼 수 있습니다.
IAnimation을 구현하는 애니메이션 및 비 애니메이션 추상 클래스를 만듭니다. 그 아래의 콘크리트 클래스는 여전히 강제 new 연산자로 IAnimation 방법을 재정의 할 수
class SomeAnim : Animated
{
public new void Foo() { }
}
사용이나 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
}
}
, 해킹의 약간. 그러나 당신이하려고하는 것은 어쨌든 디자인 결함을 나타냅니다.
나는 질문을 다시 읽었으며 여전히 예제가 필요하다고 생각한다. – mythz
질문을 다시 읽고, 나는 당신이 클래스의 인터페이스를 직접 구현하지 못하도록하는 몇 가지 구조를 요구하고 있다고 생각한다. 다른 인터페이스가 인터페이스를 상속하는 것을 방지합니다. –
예 : IAnimation이라는 인터페이스가 있는데,이 인터페이스는 INonAnimated 또는 IAnimated 인터페이스를 통해서만 구현하고 싶습니다. 그런 식으로 두 자식 인터페이스는 동일한 기본 규칙을 유지합니다. – Kukks