【发布时间】:2012-07-03 07:29:58
【问题描述】:
我有一个类别/文件树结构。类别和文件都可以有父级,所以我从具有 Parent 属性的公共基类派生它们。由于所有父节点显然总是类别(文件不能是父节点),因此将节点的 Parent 属性设置为 CategoryNode 类型似乎是有意义的。
基类引用派生类是不是不好的形式?如果是这样,为什么?如果是这样,有什么更好的方法来构建它?
class Node {
public CategoryNode Parent {get; set;}
}
class File : Node {
...
}
class CategoryNode : Node {
...
}
【问题讨论】:
-
AFAIU,它们都扩展了相同的基类来共享属性,所以为什么不使用对自身具有递归引用的单个类呢?用额外的属性来区分它们。
-
是的,这很糟糕。导致循环依赖。 Base 不应该对 Derived 有任何了解。
-
@Furqan,File节点不需要CategoryNode拥有的额外东西,比如children,所以我认为它不应该从CategoryNode派生。
标签: c# oop inheritance