1

我已经阅读了整个互联网和书籍,该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为is派生类B。所以可访问性n_IntA必须仅达到 B 类?

4

2 回答 2

2

无论层次结构级别如何,始终可以从派生类访问受保护的成员。这里有问题n_IntA 是可以访问的,因为

C 继承自 B 继承自 A

你也没有修改 B 类中的说明符,它在 B 中仍然受到保护,同样的事情发生在 C

于 2013-08-05T11:49:37.000 回答
2

可访问性通过所有继承树。

如果您没有显式隐藏成员,例如使用new-operator,则可以在继承树的最下方访问这些成员。
查看 MSDN 并了解继承的深度,尤其是在 WinForms 和 WPF 类中。如果您无法访问在System.Object整个框架中定义的成员,则会中断......

来自MSDN

使用访问修饰符(public、protected、internal 或 private)为成员指定以下声明的可访问性级别之一。

...
受保护 | 访问仅限于包含类或从包含类派生的类型。

于 2013-08-05T11:46:30.543 回答