具有继承者字段的抽象类

5

我正在制作一个包含多种二叉树类型的程序。因此,我决定创建一个抽象类,以避免复制代码。但是有一个问题,每个树的节点需要包含与节点本身相同类型的子节点。是否可以在抽象类中定义这一点呢?还是说,我最好为每种类型创建不同的类呢?

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

现在的情况是,节点可以是任何类型的BinaryNode。需要避免这种情况发生。

1
添加 where T: BinaryNodeAbstract<T>,但这可能只是一个部分解决方案。 - Dmitry Bychenko
你的实现有什么问题吗?看起来很不错啊。 - Andrey Korneyev
你现有的东西有什么问题吗?它是否需要抽象化? - bornfromanegg
我刚刚添加了一段代码...问题是有不同类型的BinaryNodes,但它需要与实现它的节点相同。 - Ozitiho
1个回答

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>
{
}

哎呀,太棒了。我正在尝试它,看起来应该会起作用。谢谢。 - Ozitiho

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接