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