有个关于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被隐藏。更不能调用子类的方法,因为子类任何额外的方法父类不能访问。