日期:2014-05-18  浏览次数:20788 次

有个关于C#继承的问题
我有两个类:
C# code
public class Parent
    {
        public string name { get; private set; }
        public int age { get; private set; }

        public Parent(string name, int age)
        {
            this.name = name;
            this.age = age;
        }

        public void ModifyAge(int age)
        {
            this.age = age;
        }
    }

    public class Child : Parent
    {
        public int Score { get; private set; }

        public Child(string name, int age, int score)
            : base(name, age)
        {
            this.Score = score;
        }

        public static void Print(Child c)
        {
            Console.WriteLine("This static method write : " + c.Score);
        }
    }


Main函数:
C# code
static void Main(string[] args)
        {
            Parent p = new Child("lijian", 27, 90);

            Child c = (Child)p;
            Child.Print(c);

            Console.ReadLine();
        }


输出的结果:
This static method write : 90

请问如果直接在Main函数中写 p.Score会提示错误,那么强制转化为Child的时候这个Score的值是从哪里来的???

------解决方案--------------------
Parent p = new Child("lijian", 27, 90);
表面上看p的类型的Parent,实际是Child类型,可以认为p的身份是Parent,而本质是Child的。当它的身份是Parent时,由于Parent类没有Score成员,所以会提示错误。
------解决方案--------------------
Parent p = new Child("lijian", 27, 90);
其实p就是一个child的实例化
------解决方案--------------------
上面打错了。不好意思。
我也刚学C#,这个是类继承的问题。
static void Main(string[] args)
{
Parent p = new Child("lijian", 27, 90);/*父类引用子类对象时,只能访问父类定义的字段,也就是p中只能访问了"lijian", 27 ,这个90被隐藏,不能访问, */

Child c = (Child)p;//强制转换后90又可以访问了。
Child.Print(c);//调用方法输出。

Console.ReadLine();
}


如果直接 p.Score 首先P不能访问Score值,90被隐藏。更不能调用子类的方法,因为子类任何额外的方法父类不能访问。