节点类模型

时间:2012-04-22 13:48:42

标签: c#

我已经创建了一个基类Node,其中包含添加和删除子项,处理父项以及搜索祖先,后代等的方法。到目前为止一切都很好。

现在我想创建一个派生类型TreeNode:节点,它有利于所有这些节点功能,但同时限制子节点和父节点具有相同的TreeNode类型。就像现在一样,我仍然将Node作为儿童和父母的类型。

我可以以某种方式使Node类的属性和方法参数类型更改为匹配派生类的类型,而不必手动覆盖或“new”吗?

class Node
{
  public TypeOfThisInstance Parent { get; }
}

class TreeNode : Node
{
}

TreeNode.Parent现在应该是TreeNode,而不是Node

2 个答案:

答案 0 :(得分:1)

使用泛型:

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

答案 1 :(得分:0)

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