我正在制作一个包含多种二叉树的程序.所以我决定创建一个抽象类,以避免复制代码.但是存在一个问题,每棵树的节点需要包含与节点本身类型相同的子节点.有没有办法在摘要中定义它,或者我应该为每种类型制作不同的类?
public abstract class BinaryNodeAbstract<T>
{
public T Value;
public BinaryNodeAbstract<T> Left;
public BinaryNodeAbstract<T> Right;
Run Code Online (Sandbox Code Playgroud)
现在的方式,节点可以是任何类型的BinaryNode.这是需要避免的.
您也应该包含父类型,以保持继承的类型Left和Right(否则您不能在实现者上使用继承的类型):
public abstract class BinaryNodeAbstract<T, L> where L : BinaryNodeAbstract<T, L>
{
public T Value;
public L Left;
public L Right;
}
Run Code Online (Sandbox Code Playgroud)
你可以像这样使用它:
public class BinaryNodeImplementation : BinaryNodeAbstract<int, BinaryNodeImplementation>
{
}
Run Code Online (Sandbox Code Playgroud)