受保护成员的可访问性

本文关键字:访问 成员 受保护 | 更新日期: 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 中