문제

나는 비슷한 게시물의 일부를 이해하려고 노력했지만 그들의 목적을 잘 이해하지 못하고 내 자신을 설명 할 것이라고 생각했다 ...

속성이있는 코드와 메소드로 완전히 정의 된 클래스가 있습니다. 더 많은 파생 클래스에 의해 많은 방법이 가상적입니다. 그래서 나는 다음과 같은 것이 있습니다

Class_Main
  --  Class_A : Class_Main
  --  Class_B : Class_Main
  --  Class_C : Class_Main
  --  Class_D : Class_Main

그런 다음 AD에서 동적으로 파생 될 수있는 클래스를 하나 더 정의해야합니다.

Class_X : Class_A (or Class_B or Class_C or Class_D )

클래스 _x 내에 추가 속성과 메소드가 있습니다. C#은 두 가지 실제 클래스에서 도출 할 수 없지만 인터페이스를 사용할 수는 있지만 인터페이스에 코드를 가질 수는 없으므로 추상 서명만으로도 그러한 구현을 수행 할 수있는 방법

감사

도움이 되었습니까?

해결책

당신이 묘사하는 것은 조금 비슷합니다 오리 타이핑. 정적으로 유형 된 언어이므로 C#으로 사용할 수 없습니다. 아마도 C# 4가 돌아 오면 dynamic 당신이 찾고있는 것을 줄 것입니다.

만약에 Class_X 해당 클래스의 기능으로 "채워"해야하며, 인스턴스화 시점에이를 수업에 전달하는 것이 일반적입니다.

public class Class_X {
    private Class_Main _impl;
    public Class_X(Class_Main impl) {
        _impl = impl;
    }
}

Class_X classXA = new Class_X(new Class_A());
Class_X classXB = new Class_X(new Class_B());

이 시점에서, 당신의 Class_X 인스턴스에 액세스 할 수 있습니다 Class_Main 모든 파생 클래스에 대한 속성 및 방법. 이것은 만들지 않습니다 Class_X 집계는 단지 어떤 런타임 동작을 사용할 수 있습니다. Class_Main 안으로부터 Class_X ( _impl 물체).

다른 팁

한 클래스에서 확장하고 클래스 X 내에 다른 클래스를 포함시키고 내부 클래스에 직접 매핑 할 수있는 어댑터 방법 만 있습니다.

이제 정확히 C#, 프로토 타이핑 만하면됩니다.

class ClassA {
  public void FunctionClassA(...) { ... }
  public void FunctionClassB(...) { ... }
}

class ClassX : ClassB {
  private ClassA classa;
  public ClassX() {
     classa = new ClassA();
  }
  public void FunctionClassA(...) { classa.FunctionClassA(...); }
}

따라서 ClassX는 이제 Classa에서 하나의 기능을 상속 받고 있으며 ClassB의 모든 방법을 포함합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top