背景:我还是个 C# 新手,这是我第一个继承的大项目。以下故事是我当前情况的简化示例:
假设我有一个名为LivingOrganism
. 每个生物都可以使用这个类作为基础,并继承所有生物共有的功能。
当我在学习其中一些derived
课程时,我发现香蕉和人类非常相似。尽管它没有多大意义,而且它们看起来一点也不像,但它们显然具有大部分共同的“功能”。
代码重复是不好的,所以我写了一个新类来降低维护成本。这个类被称为:BananaHuman
。我的Human
班级和Banana
班级继承自BananaHuman
.
问题:
我的 BananaHuman 没有问题(即我理解它的含义以及它存在的原因)。但最终,其他人(甚至那些不(完全)理解继承的人)将不得不使用我的LivingCreatures.dll。他们不明白为什么当他们输入“B”时智能感知会提示 BananaHuman。
并考虑以下代码:
//Valid and makes sense.
foreach(LivingOrganism foo in cityOfNeyYork) { /*embedded statement*/ }
但是想象一下,如果我们Living Organism
用BananaHuman
.
我不能 make BananaHuman
private
,protected
或者protected internal
(命名空间中定义的元素不能以这种方式显式声明)。我也做不到,internal
因为Human
而且Banana
必须public
。如果我尝试这个,我会收到一条错误消息,指出存在inconsistent accessibility
问题。
我觉得我错过了显而易见的事情,但我能/应该做什么?我有几个选项/问题:
- 是否可以“隐藏”
BananaHuman
以避免混淆? - 我是否应该重写
BananaHuman
一些非常长且技术性的东西,例如DnaRelatedOrganismsType[X]
“X”描述它们的独特关系? - 当需要更改某些内容时,我是否应该删除
BananaHuman
、让Human
和Banana
继承并进行额外的维护?LivingOrganism
- 还有另一种我完全想念的解决方案吗?
我四处搜寻,找不到适合这种情况的“固定模式” 。我发现这个问题的标题相似,但我不知道答案是否适用,因为他似乎在问一些完全不同的问题。
任何帮助是极大的赞赏!