2013-07-16 5 views
0

나는 나무이어야한다 제네릭 클래스를 가지고 있고 이런 클래스 상속 할 제네릭에서 상속 :C# 클래스 메소드 리턴 타입

public class Tree<T> { 
    private HashSet<Tree<T>> leaves; 
    private T data; 

    public Tree() { 
     leaves = new HashSet<Tree<T>>(); 
    } 

    public Tree(T data) : this() { 
     this.data = data; 
    } 

    public T Data { 
     get { 
      return this.data; 
     } 
     set { 
      data = value; 
     } 
    } 

    public virtual Tree<T> findInLeaves(T data) { 
     foreach(Tree<T> leaf in leaves) { 
      if(leaf.Data.Equals(data)) { 
       return leaf; 
      } 
     } 
     return null; 
    } 
} 

public class ComboTree : Tree<IComboAction> { 
    private ComboMovement movement; 

    public ComboTree() : base() { 
     Movement = null; 
    } 

    public ComboTree(IComboAction action) : base(action) { 
     Movement = null; 
    } 

    public ComboMovement Movement { 
     get { 
      return this.movement; 
     } 
     set { 
      movement = value; 
     } 
    } 
} 

퍼팅 데이터가 잘 작동을하지만 난 방법을 사용하려고 할 때 findInLeaves 나는 항상 null을 얻는다. 형식 변환에 문제가 있음을 알고 있지만 ComboTree가 Tree를 상속하는 이유는 무엇입니까?

void readMove(IComboAction action) { 
    ComboTree leaf = (ComboTree)currentLeaf.findInLeaves(action); 
} 

질문은 왜 고쳐야합니까?

편집 : 콘솔 프로그램을 생성하고 실행하면 작동합니다. 그래서 이것은 내 엔진 문제 일 것임에 틀림 없다!

+0

반환되는 개체는 부모 제네릭 클래스의 생성자에 전달 된 개체와 동일합니다. '루트'가 초기화 된 방법을 보여주십시오. – SimpleVar

+1

아니요, "this"가 컴파일되지 않기 때문에 "this like"라는 간단한 제네릭 클래스가 없습니다. 실제 사례가 있습니까? 미안하지만 세부 사항은 중요합니다. " 'GenericTree '에는 0 개의 인수를 취하는 생성자가 포함되어 있지 않습니다."- 우리는 ** 실제로 ** 주석을 달 수있는 생성자 사용법을 볼 필요가 있습니다. –

+0

루트를 생성하고 테스트를 호출하는 코드 표시 – Tarik

답변

0
public ComboTree(IComboAction action) 
    : base(action) 
{ 
    Movement = null; // <---- You are nulling Movement in the second constructor 
}