gpt4 book ai didi

c# - 基类可以包含对其子类之一的引用吗?

转载 作者:太空宇宙 更新时间:2023-11-03 19:04:42 24 4
gpt4 key购买 nike

我编写了以下类来创建树层次结构,但是由于所有节点类都包含类型为 ParentNode 的父节点,所以我想将其移动到基类中,所以我不这样做必须为所有节点类型重写与父节点相关的任何代码。因此,虽然它显然有效,但在 NodeBase 类中有一个类型为 ParentNode 的字段是否被认为是不好的做法,如果是的话, 解决这个问题的“正确”方法是什么?

public abstract class NodeBase{
/*Various general methods and properties*/
}
public class ParentNode : NodeBase{
public readonly ParentNode Parent;
public readonly List<NodeBase> Children;

/*Methods etc related to parent nodes*/
}
public class LeafNode : NodeBase{
public readonly ParentNode Parent;

/*Methods etc related to leaf nodes*/
}

我不能只在 NodeBase 类中放置一个 public readonly NodeBase Parent,因为 NodeBase 没有 Children 列表,并将 Children 放在那里,会导致 LeafNode 也有该列表。

最佳答案

这个模式用的很频繁,没什么问题。

乍一看,这似乎有点像循环依赖,但实际上并没有什么问题。因此,当您需要(想要)对特殊类型的派生节点的引用时,您可以并且应该对其进行精确建模。比使用更通用的 NodeBase Parent {get; set; 然后将其用于类型转换和额外检查。

这很常见,例如在 XObject 中类:

class XObject
{
public XElement Parent { get; }
public XDocument Document { get; }
}

class XElement : XObject { ... } // with a few classes
class XDocument : XObject { ... } // in between

关于c# - 基类可以包含对其子类之一的引用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30198121/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com