我知道它有效,但似乎无法理解实际发生的事情:
public class Base {
private bool active;
protected bool Active {
get { return active; }
set { active = value; }
}
}
public class Child : Base {
// ...
}
AFAIK,Child不会继承private
个字段,而Child.Active
也会有效。
答案 0 :(得分:2)
Child
类具有Base
类声明的所有成员。是否可以直接 1 访问特定成员是访问修饰符的变化。
Child
类无法直接访问active
,但这并不意味着 active
领域。它只是无法访问。并且代码继承自访问该字段的Base
,无论该代码是属性还是方法,都能继续访问该字段。
如果Child
选择覆盖 Active
,那么 代码仍无法直接访问 {{1} }字段。但是它可以通过在覆盖中使用active
属性来间接地对字段进行更改。
1 在反射或其他技巧周围插入所有常见警告,这些警告可能允许完全受信任的代码更改由访问修饰符“保护”的字段。
答案 1 :(得分:1)
'protected'没有以任何方式将Active
移到Child中,只是让Child
可以访问它。因此Child
可以调用Active
,Active
的内容可以查看字段值。
自动属性的工作方式相同。