为什么我不能以这种方式访问​​私有变量时访问基类的私有字段

时间:2013-09-13 13:05:58

标签: c# java

我正在阅读下面链接中提到的问题 Why are private fields private to the type, not the instance?
Access to private members of class
Access private field of a instance object

public class MyClass : ClassA
    {
        private object myObj;

        public object Field
        {
            get { return myObj; }
            set { myObj = value; }
        }

        public MyClass()
        { 
        }


        public MyClass(MyClass class1)
        {
            class1.myObj = 5;
            this.myObj = class1.myObj;
            class1.myObjOfClassA; // Why I can not access myObjOfClassA when I can access myObj of class1 object
        }
    }


    public class ClassA
    {
        private object myObjOfClassA;

    }

我的问题是 1)如果我们可以访问所提到的Class的私有变量那么为什么扩展另一个类的类不能访问基类的私有变量?

2)我相信当编译代码或类时,基类的所有方法,变量等都将被添加到派生类中。我是对的吗?

1 个答案:

答案 0 :(得分:4)

  

如果我们可以像上面提到的那样访问Class的私有变量那么为什么扩展另一个类的类不能访问基类的私有变量?

因为变量未在派生类的程序文本中声明,这就是为Java和C#定义私有访问的方式。 (嵌套类的细节在Java和C#之间有所不同;如果您想要一种语言的详细信息,请在您的问题中更具体。)

  

我相信当编译代码或类时,基类的所有方法,变量等都将被添加到派生类中。我是对的吗?

他们没有加入课堂,没有。它们是由派生类继承的,派生类的任何实例都将包含所有继承的字段 - 但这与它们的行为方式不同,就好像它们是声明的那样在派生类中。