首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

有个关于C#继承的有关问题

2012-04-30 
有个关于C#继承的问题我有两个类:C# codepublic class Parent{public string name { get private set }p

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


热点排行