我正在阅读下面链接中提到的问题
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)我相信当编译代码或类时,基类的所有方法,变量等都将被添加到派生类中。我是对的吗?
答案 0 :(得分:4)
如果我们可以像上面提到的那样访问Class的私有变量那么为什么扩展另一个类的类不能访问基类的私有变量?
因为变量未在派生类的程序文本中声明,这就是为Java和C#定义私有访问的方式。 (嵌套类的细节在Java和C#之间有所不同;如果您想要一种语言的详细信息,请在您的问题中更具体。)
我相信当编译代码或类时,基类的所有方法,变量等都将被添加到派生类中。我是对的吗?
他们没有加入课堂,没有。它们是由派生类继承的,派生类的任何实例都将包含所有继承的字段 - 但这与它们的行为方式不同,就好像它们是声明的那样在派生类中。