런타임에 파생 된 유형의 클래스를 작성합니다
-
16-09-2019 - |
문제
나는 비슷한 게시물의 일부를 이해하려고 노력했지만 그들의 목적을 잘 이해하지 못하고 내 자신을 설명 할 것이라고 생각했다 ...
속성이있는 코드와 메소드로 완전히 정의 된 클래스가 있습니다. 더 많은 파생 클래스에 의해 많은 방법이 가상적입니다. 그래서 나는 다음과 같은 것이 있습니다
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의 모든 방법을 포함합니다.