我已经创建了一个基类Node,其中包含添加和删除子项,处理父项以及搜索祖先,后代等的方法。到目前为止一切都很好。
现在我想创建一个派生类型TreeNode:节点,它有利于所有这些节点功能,但同时限制子节点和父节点具有相同的TreeNode类型。就像现在一样,我仍然将Node作为儿童和父母的类型。
我可以以某种方式使Node类的属性和方法参数类型更改为匹配派生类的类型,而不必手动覆盖或“new”吗?
class Node
{
public TypeOfThisInstance Parent { get; }
}
class TreeNode : Node
{
}
TreeNode.Parent
现在应该是TreeNode
,而不是Node
。
答案 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。所有这些都是关于创建树状结构,其中结构中的叶子可以以与分支相同的方式处理(分支是可以包含多个叶子的子结构,以及其他分支)。这里的想法是,为了让生活更轻松,你应该能够在树形结构中处理树叶的叶子和成分。