基类属性从基类继承

3

我正在进行代码审查,发现一个抽象类继承自另一个抽象基类,而这个基类有一个属性是继承类的。

目前我无法调试代码以查看它如何工作,但我确信这在生产环境中已经运行多年。

因此,对于以下逻辑,我不知道每一步是如何实现的。

继承者:

public class Inheritor : Base {
  ...
  properties
  ...
}

基础:

public class Base {
  public Inheritor { get; set; }
  ...
  other properties
  ...
}

这怎么可能呢?

什么逻辑?这只是一个类结构。为什么不允许Animal类拥有一个类型为Dog的属性呢? - Blorgbeard
在不看基类中如何初始化“Inheritor”的情况下,它完全有可能在初始化过程中为空,这意味着它没有被循环引用。 - Ron Beyer
2个回答

6

以下是一个例子,希望可以在概念层面上理解:

public class Boss : Employee {
  ...
  properties
  ...
}

public class Employee {
  public Boss { get; set; }
  ...
  other properties
  ...
}

可能有许多种员工,但每个员工都可能有一个老板(也是一种特定的员工)。请记住,非原始类型的属性是“引用”,因此并不是说一个“员工”包含一个“老板”,后者又包含一个“老板”,依此类推。一个“员工”可以“引用”一个“老板”,后者可以“引用”一个“老板”,以此类推。在某个点上,它停止于一个没有“老板”的“老板”(引用为“null”),或者形成了循环。

1
一下子就明白了。天啊,我不知道为什么我之前没意识到这个更加显而易见。 - FiringSquadWitness

3

我认为你可能会在“is-a”和“has-a”的关系概念上有些混淆,你可能认为“has-a”与“is-a”一样受到限制。一个“继承者”是一个“基类”,如果反过来也成立,即“基类”也是一个“继承者”,那就非常奇怪了。但是,“基类”拥有一个“继承者”是完全可以的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接