2013-07-16 56 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继承树?

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

的问题是为什么,以及如何解决它?

编辑:我创建控制台程序,运行它,它的工作原理。所以这一定是我的引擎问题!

+0

返回的对象与传递给父泛型类的构造函数的对象相同。告诉我们如何初始化'root'。 – SimpleVar

+1

不,你不要有一个简单的泛型类“这样的”,因为“这”不会编译。你有一个真实的例子吗?对不起,但细节很重要。特别是,“‘GenericTree ’不包含一个构造函数参数0” - 我们真的** **需要看到构造函数的使用评论 –

+0

显示创建根和调用test – Tarik

回答

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