C# 节点类模型

C# 节点类模型,c#,C#,我已经制作了一个基类节点,其中包含了添加和删除子节点、处理父节点以及搜索祖先、后代等方法。到目前为止效果良好 现在我想创建一个派生类型TreeNode:Node,它可以从所有这些节点特性中获益,但同时限制子节点和父节点具有相同的TreeNode类型。现在,我仍然将节点作为子节点和父节点的类型 我是否可以在不必手动重写或“新建”的情况下,以某种方式更改节点类的属性和方法参数类型,以匹配派生类的类型 TreeNode.Parent现在应该是TreeNode,而不是节点,使用泛型: public cl

我已经制作了一个基类节点,其中包含了添加和删除子节点、处理父节点以及搜索祖先、后代等方法。到目前为止效果良好

现在我想创建一个派生类型TreeNode:Node,它可以从所有这些节点特性中获益,但同时限制子节点和父节点具有相同的TreeNode类型。现在,我仍然将节点作为子节点和父节点的类型

我是否可以在不必手动重写或“新建”的情况下,以某种方式更改节点类的属性和方法参数类型,以匹配派生类的类型

TreeNode.Parent
现在应该是
TreeNode
,而不是
节点
,使用泛型:

public class BaseNode<T> where T : BaseNode<T>
{
  private T _parent;
  public T Parent { get { return _parent;} }
}
public class Node : BaseNode<Node>
{
} 
public class TreeNode : BaseNode<TreeNode>
{
}
公共类BaseNode,其中T:BaseNode
{
私人T_父母;
公共T父项{get{return\u Parent;}
}
公共类节点:BaseNode
{
} 
公共类树节点:BaseNode
{
}

我认为您需要构建。这一切都是关于创建树状结构,其中结构中的叶子可以与分支(可以包含多个叶子以及其他分支的子结构)以相同的方式处理。这里的想法是,为了让生活更轻松,你应该能够以相同的方式对待树结构中的叶子和叶子的组成。

你为什么要这样做?
TreeNode
Node
有何不同?我认为,应该指出这种方法的局限性:您可以使
class-Node:BaseNode
class-TreeNode:BaseNode
。这没有多大意义,但你可以做到。通过使用通用约束,您可以避免一些(但不是全部)问题。是的,@svick是正确的。您可以在BaseNode类上添加一个约束,如:
where T:BaseNode
Thank。我很确定我以前试过这个,只得到StackOverflowExceptions。。。奇怪。。。它现在似乎工作得很好!
public class BaseNode<T> where T : BaseNode<T>
{
  private T _parent;
  public T Parent { get { return _parent;} }
}
public class Node : BaseNode<Node>
{
} 
public class TreeNode : BaseNode<TreeNode>
{
}