【发布时间】:2021-11-27 15:06:02
【问题描述】:
假设我有一个名为Node 的类,它表示层次结构中的一个节点。
例如,它可能看起来像这样:
public class Node
{
public readonly string Data { get; set; }
public readonly Node Parent { get; set; }
public readonly List<Node> Children { get; } = new()
public Nome(string Data, Node parent)
{
Data = data;
Parent = parent;
}
}
请注意属性Parent 的类型为Node,并且它不可为空,因此我无法将null 分配给它。
现在假设我想为这个类实现Null Object Pattern,例如创建根节点。
我发现自己处于先有鸡还是先有蛋的境地,因为我无法在没有节点的情况下创建 Node。
除了使Parent 可以为空之外,还有其他选择吗?
【问题讨论】:
-
我个人认为“空对象模式”是一种反模式,原因不胜枚举。相反,我建议使用自定义联合类型。
-
其实为什么不将
Parent属性标记为Node? Parent? (即将其标记为可空)。毕竟,当节点为根时,它可以有效地为null- 并添加一个简短的注释:“当Node是图的根时,此属性为null”) . -
另外,问题标题是“自引用对象”,但我实际上并没有在这里看到任何自引用代码......请澄清。
-
@Dai 你是对的,感谢你的反馈。我更改了问题标题,希望它更清楚。
-
现在它说“自引用对象” - 但您的代码中仍然存在零自引用。
标签: c# design-patterns