2014-10-02 93 views
5

我正在制作一个程序,其中包含多种类型的二叉树。所以我决定做一个抽象类,以避免复制代码。但是有一个问题,每棵树的节点需要包含与节点本身相同类型的子节点。是否有任何方法可以在抽象中对此进行定义,还是应该为每种类型创建不同的类?作为字段的继承者摘要

public abstract class BinaryNodeAbstract<T> 
{ 
    public T Value; 
    public BinaryNodeAbstract<T> Left; 
    public BinaryNodeAbstract<T> Right; 

现在的方式是,节点可以是任何类型的BinaryNode。这是需要避免的。

+1

加上'其中T:BinaryNodeAbstract ',但它可能只是部分解决 – 2014-10-02 13:53:27

+0

那么,什么是错的实施?它看起来不错。 – 2014-10-02 13:54:18

+0

你有什么问题?它甚至需要抽象吗? – bornfromanegg 2014-10-02 13:54:32

回答

7

您应包括父类型也不断继承的类型上LeftRight(否则你无法使用的实施者继承的类型):

public abstract class BinaryNodeAbstract<T, L> where L : BinaryNodeAbstract<T, L> 
{ 
    public T Value; 
    public L Left; 
    public L Right; 
} 

您可以使用它像这样:

public class BinaryNodeImplementation : BinaryNodeAbstract<int, BinaryNodeImplementation> 
{ 
} 
+0

Awh男人,这是疯了。我现在正在尝试,看起来应该起作用。谢谢。 – Ozitiho 2014-10-02 13:59:25

+0

对于downvoter:为什么? – 2014-10-02 14:00:02