我已经在互联网和书籍上阅读了protected
成员只能在班级内和仅在派生班级中访问的内容。我正在尝试以下代码
class Program
{
static void Main(string[] args)
{
}
}
abstract class A
{
protected int n_IntA = 0;
public abstract void AMethod();
}
abstract class B : A
{
int nb;
public B()
{
}
public abstract void GetProtected();
public override void AMethod()
{
}
}
class C : B
{
public override void GetProtected()
{
// Here n_IntA is accessible why ??
}
}
但是在课堂c n_IntA
中可以访问。为什么? A
的派生类是B
。因此n_IntA
的可访问性必须仅限于B类?
答案 0 :(得分:2)
可访问性通过继承树的 ALL 进行。
如果您没有明确隐藏成员,例如使用new
- 运算符,则可以在继承树的远端访问这些成员。
看一下MSDN,看看深度继承有多深入,特别是在WinForms和WPF类中。如果您无法访问System.Object
中定义的成员,整个框架将会破坏......
来自MSDN:
使用访问修饰符public,protected,internal或private为成员指定以下声明的可访问性级别之一。
...
受保护访问仅限于从包含类派生的包含类或类型。
答案 1 :(得分:2)
无论层次结构的级别如何,始终可以从派生类访问受保护的成员。问题n_IntA
可以访问,因为
C继承自A
的B继承你也没有修改B类中的说明符,它在B中保持受保护,而C
也是如此