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