none
访问修饰符protected的疑问 RRS feed

  • 问题

  • using System;
    class A
    {
        protected int x = 123;
    }

    class B : A
    {
        static void Main()
        {
            A a = new A();
            a.x = 10;          
        }
    }
    为什么会出错?
    protected的解释:类A标识为protected的成员能够被类A和类A的派生类访问。

    类B继承类A,为什么不能访问类A的protected成员呢?

    此问题迷惑小弟已久,请各位大神帮忙,感激不尽。

     

    2010年6月19日 2:55

答案

全部回复

  • protected类型成员能够被派生类所继承并且能够通过派生类类型访问

    protected类型并不是能够被派生类所访问就是随心所欲的访问,而是有条件的,

    访问必须是通过派生类类型发生时,在派生类中的基类的protected类型成员才能够被访问

    参照

    http://www.cnblogs.com/skyaspnet/archive/2010/03/25/1695555.html


    努力+方法=成功
    • 已标记为答案 路飞 2010年6月19日 5:00
    2010年6月19日 3:52
  • 感谢大神,
    2010年6月19日 4:59
  • 追加一下,在您的代码中,protected 修饰符修饰的是一个实例字段,而在派生类中是通过静态方法来访问,这是不允许的。

    如果把 x 的签名改成 protected static int x = 123; 就可以在静态的 Main 方法中访问了。


    Mark Zhou
    2010年6月21日 10:08