当您继承私有字段支持的受保护属性时会发生什么?

时间:2016-10-17 10:11:37

标签: c# inheritance

我知道它有效,但似乎无法理解实际发生的事情:

public class Base {
  private bool active;
  protected bool Active {
    get { return active; }
    set { active = value; }
  }
}

public class Child : Base {
  // ...
}

AFAIK,Child不会继承private个字段,而Child.Active也会有效。

  • 这是否意味着儿童仍然以某种方式继承了该领域的知识
  • 使用自动属性时,它在内部是否有效?

2 个答案:

答案 0 :(得分:2)

Child类具有Base类声明的所有成员。是否可以直接 1 访问特定成员是访问修饰符的变化。

Child类无法直接访问active,但这并不意味着 active领域。它只是无法访问。并且代码继承自访问该字段的Base,无论该代码是属性还是方法,都能继续访问该字段。

如果Child选择覆盖 Active,那么 代码仍无法直接访问 {{1} }字段。但是它可以通过在覆盖中使用active属性来间接地对字段进行更改。

1 在反射或其他技巧周围插入所有常见警告,这些警告可能允许完全受信任的代码更改由访问修饰符“保护”的字段。

答案 1 :(得分:1)

'protected'没有以任何方式将Active移到Child中,只是让Child可以访问它。因此Child可以调用ActiveActive的内容可以查看字段值。

自动属性的工作方式相同。