using System;namespace Test
{
class A
{
protected int x;
public void FunA(A a, B b)
{
a.x = 10;
b.x = 12;
}
}

class B : A
{
public void FunB(A a, B b)
{
a.x = 15;
b.x = 16;
}
}
}
protected成员不是可以在基类和派生类中使用吗??
为什么派生类中a就不可以调用x呢?
如果说是a跳出了它所属类型进行访问,那b也跳出了它的所属类型B啊?
想了很久,希望各位能给我详细解释一下!!!
谢谢!!!

解决方案 »

  1.   

    protected成员的理解: 应该是 这个成员能在基类范围里运用。
    还有就是能被子类继承,
    带颜色的代码有问题,他已经超出了基类的范围,估计会出错class B : A
        {
            public void FunB(A a, B b)
            {
                         a.x = 15;   
             b.x = 16;
            }
        }
      

  2.   

    A是不是基类跟FunB中的A一点关系都没有...B知道A是基类但A不知道B是它的派生类...懂不懂?
      

  3.   

    你 a.x = 15; 虽然是在派生类中写的,
    但这是通过A的实例来访问的,所以超出访问范围。如果你直接x=15或者base.x是可以访问的
      

  4.   

      public void FunB(A a, B b)
            {
                x = 12;//这句是可以的,因为B是派生自A,所以可以访问A中的protected成员。
    //下面两句不行,因为a.x你是访问A类实例化对象的x,x只能在A类中的代码进行访问,不能这样访问。    
                a.x = 15;
                b.x = 16;
            }
      

  5.   

    有道理,A在B中的对象,B不知道A的对象是B的父类
      

  6.   


    但是他被B类继承了啊。b.x操作的是继承的部分,protected成员:这个成员能在基类范围里运用。
    还有就是能被子类继承,