受保护成员的可访问性
本文关键字:访问 成员 受保护 | 更新日期: 2023-09-27 18:26:31
我在互联网上读过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类??
可访问性通过继承树的ALL。
如果没有显式隐藏成员,例如使用new
运算符,则可以访问继承树下的这些成员
看看MSDN,看看深度继承是如何进行的,尤其是在WinForms和WPF类中。如果你不能访问System.Object
中定义的成员,整个框架就会崩溃。。。
来自MSDN:
使用访问修饰符(public、protected、internal或private)为成员指定以下声明的可访问级别之一。
protected|Access仅限于包含类或从包含类派生的类型。
无论层次结构级别如何,受保护的成员始终可以从派生类访问。这里有问题的n_IntA
是可访问的,因为
C继承自从继承的B
同样,您没有修改类B中的说明符,它在B中仍然受到保护,同样的事情也发生在C 中