2012-04-22 3 views
0

나는 하위 클래스를 추가하고 제거하고, 부모를 처리하고 조상, 자손 등을 검색하는 메소드가있는 기본 클래스 Node를 만들었습니다.노드 클래스 모델

이제 파생 형식 인 TreeNode : Node를 만들고 싶습니다. 그러나이 노드 기능을 모두 사용하지 않지만 동시에 자식 및 부모가 동일한 TreeNode 형식을 사용하도록 제한하고 있습니다. 지금은 자식과 부모를위한 노드 형식을 유지합니다.

Node 클래스의 속성 및 메서드 인수 유형을 수동으로 재정의하거나 "new"하지 않고 파생 클래스의 유형과 일치하도록 변경할 수 있습니까?

class Node 
{ 
    public TypeOfThisInstance Parent { get; } 
} 

class TreeNode : Node 
{ 
} 

TreeNode.Parent 지금 TreeNode 아닌 Node해야한다.

+0

왜 그렇게하고 싶습니까? 'TreeNode'는'Node'와 어떻게 다른가요? – svick

답변

1

사용하여 제네릭 :

public class BaseNode<T> where T : BaseNode<T> 
{ 
    private T _parent; 
    public T Parent { get { return _parent;} } 
} 
public class Node : BaseNode<Node> 
{ 
} 
public class TreeNode : BaseNode<TreeNode> 
{ 
} 
+1

나는이 접근법의 한계점을 지적해야한다고 생각한다. 클래스 Node : BaseNode 또는 클래스 TreeNode : BaseNode 을 만들 수있다. 별로 의미가 없지만 할 수 있습니다. 일반 제약 조건을 사용하여 이러한 문제 중 일부 (전부는 아님)를 피할 수 있습니다. – svick

+0

네, @ 스님이 맞습니다. 다음과 같이 BaseNode 클래스에 제약 조건을 추가 할 수 있습니다 :'T : BaseNode ' – Magnus

+0

고마워요. 나는 전에 이것을 시도했지만 StackOverflowExceptions ... strange를 얻었을 것이라고 확신한다. –

0

난 당신이 composite design pattern를 구축 할 필요가 있다고 생각합니다. 그것은 나무 모양의 구조를 만드는 것입니다. 구조의 잎은 가지 (여러 가지 잎과 다른 가지를 포함 할 수있는 하부 구조)와 같은 방식으로 취급 될 수 있습니다. 여기서 아이디어는 삶을 편하게하기 위해 나무 구조에서 잎의 잎과 작곡을 동일하게 취급 할 수 있어야한다는 것입니다.