有如下类:
--------------------------------------------------------------
GrandFather.cs
--------------------------------------------------------------
public class GrandFather
{
private int age;
private string name;
public GrandFather()
{
} public int Age
{
get
{
return age;
}
set
{
age=value;
}
} public string Name
{
get
{
return name;
}
set
{
name=value;
}
} public override string ToString()
{
return String.Format("爷爷的名字是{0},年龄是{1}",Name,Age);
}
}-------------------------------------------------------------------
Son.cs
-------------------------------------------------------------------
public class Son:GrandFather
{
public Son()
{
} public override string ToString()
{
return String.Format("孙子的名字是{0},年龄是{1}",Name,Age);
}
}------------------------------------------------------------------
MainClass.cs
------------------------------------------------------------------
public class MainClass
{
[STAThread]
public static void Main(string[] args)
{
Son son=new Son();
son.Age=20;
son.Name="孙子";
Console.WriteLine(son.ToString());
Console.ReadLine();
}
}三个类的源代码如上,现有问题如下:
在MainClass.cs给Son的实例的Name或者Age属性赋值的时候,最后都会导致age或者name值发生变化,而这个值是private的,Son不能访问GrandFather的私有成员,实际上程序不会报错,请给出解释。

解决方案 »

  1.   

    从父类继承相当于把如下代码写到了子类 private int age;
    private string name;
    public int Age
    {
    get
    {
    return age;
    }
    set
    {
    age=value;
    }
    } public string Name
    {
    get
    {
    return name;
    }
    set
    {
    name=value;
    }
    }
      

  2.   

    实际上当然不会报错,因为根本没有错,楼主漏掉一个关键字 "直接" 
    没有任何说"Son不能访问GrandFather的私有成员",是 "不能直接访问"都已经通过一个public属性了,还怎么算是"直接" ? 
    Son访问public属性,public属性在GrandFather类内部访问私有成员,有什么不对?如果间接访问都不行的话,那么私有私有的成员将不再有任何意义,因为对系统的任何其他部分,它都有和没有完全一样.
      

  3.   

    昨天晚上回去想了一下,同意syeerzy的看法。