C# 以继承者作为字段的摘要

C# 以继承者作为字段的摘要,c#,.net,C#,.net,我正在制作一个包含多种二叉树的程序。所以我决定创建一个抽象类,以避免复制代码。但是有一个问题,每个树的节点都需要包含与节点本身类型相同的子节点。有什么方法可以在抽象中定义它,还是应该为每种类型创建不同的类 public abstract class BinaryNodeAbstract<T> { public T Value; public BinaryNodeAbstract<T> Left; public BinaryNodeAbstract&

我正在制作一个包含多种二叉树的程序。所以我决定创建一个抽象类,以避免复制代码。但是有一个问题,每个树的节点都需要包含与节点本身类型相同的子节点。有什么方法可以在抽象中定义它,还是应该为每种类型创建不同的类

public abstract class BinaryNodeAbstract<T>
{
    public T Value;
    public BinaryNodeAbstract<T> Left;
    public BinaryNodeAbstract<T> Right;
公共抽象类BinaryNodeAbstract
{
公共价值观;
公共二进制nodeAbstract左;
公共二元nodeabstract权限;

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

您也应该包括父类型,以保持继承的类型在
左侧
右侧
(否则您不能在实现者上使用继承的类型):

公共抽象类BinaryNodeAstract,其中L:BinaryNodeAstract
{
公共价值观;
公众左;
公权力;
}
您可以这样使用它:

public class BinaryNodeImplementation : BinaryNodeAbstract<int, BinaryNodeImplementation>
{
}
公共类BinaryNodeImplementation:BinaryNodeAstract
{
}

add
where T:BinaryNodeAbstract
,但它可能只是部分解决方案。您的实现出了什么问题?它看起来很好。您的实现出了什么问题?它甚至需要抽象吗?我刚刚添加了一个片段……问题是有不同类型的BinaryNode,但它需要与一个实现了它的。啊,伙计,这太疯狂了。我现在正在尝试,看起来它应该能工作。谢谢。
public class BinaryNodeImplementation : BinaryNodeAbstract<int, BinaryNodeImplementation>
{
}