C# 사용 다른 메타 정보 중에서도 유향 그래프의 루트 노드를 포함하는 클래스가 있습니다. 이것을 컨테이너 클래스이라고합시다. 이 컨테이너는 편집기 모드와 구성자 모드의 두 가지 모드로 나타날 수 있습니다. 모드에 따라 루트 노드의 유형은 입니다. NodeEdit 또는 NodeConfig (모두 동일한 서브 클래스에서 상속)상속 된 속성의 유형 변경 (상속 된 형식으로)
컨테이너public abstract class NodeBase
{
string Name { get; set; }
...
}
public class NodeEdit : NodeBase ...
public class NodeConfig : NodeBase ...
가, 나 또한 기본 클래스를 생성하고 상속 :
public abstract class ContainerBase
{
NodeBase Root { get; set; }
...
}
ContainerBase에서 상속하여 편집기 - 및 Configuratorcontainer을위한 클래스를 만드는, 내가 유형되고 싶어 루트 - 부동산 (NodeBase에서 상속) 특정 같은 입력 :
public class ContainerEditor : ContainerBase
{
NodeEditor Root { get; set; }
...
}
하지만 ContainerBase에 정의 된 속성의 유형을 변경할 수 없습니다. 이 문제를 해결할 방법이 있습니까? 나는 BaseNode 형을 사용하고 형 NodeEditor이 형 BaseEditor에서 상속되기 때문에
ContainerEditorInstance.Root = new NodeEditor();
같은 NodeEditor의 요소를 추가 할 수 있지만 컨테이너 - 편집기 클래스에서, 나는 명시 적으로 단지의 유형을 허용 할 수 있습니다 루트 속성은 노드 편집기입니다. 나는 setter에서 이것을 검사하고 NodeEditor 타입의 모든 노드를 거부 할 수 있지만, 특정 유형의 속성을 갖고 싶습니다. 그래서 컴파일 타임에 잘못된 할당을 감지 할 수 있습니다. 사전에
감사합니다,
프랭크
안녕하세요 마크, 답장을 보내 주셔서 감사합니다! 나는 이미 그것을 재 선언으로 시도했지만, 아마도 나는 잘못된 것을했을 것이다. 귀하의 접근 방식을 테스트하고 잘 작동합니다! 일반적으로 제네릭이나 그 반대로 재 선언을 선호하거나 동등한 상황이 있습니까? – Aaginor
전체 일반 항목은 일반 기본 클래스, 즉 추상 반환 유형을 사용해야하는 경우 심각한 문제를 일으 킵니다.그래서 재 선언을 할 것입니다. 왜냐하면 그것은 덜 관입 적이기 때문입니다. 'new'및 'override'와 비교하여 내부에서 재 선언하는 방법은 무엇입니까? 추천 할만한 좋은 기사가 있습니까? 다시 한 번 감사드립니다! – Aaginor