c#泛型集合和多态的问题

来源:百度知道 编辑:UC知道 时间:2024/05/16 06:41:33
问题1:

list<Person> persons=new list<Person>();

有一个Student类是Person类的子类

所以可以persons.Add(Student类的实例对象);这样添加到集合中

但是泛型集合不是约束了添加的类型吗,为什么不是Person类的Student类也能添加到集合中(请不要光用一句Student是Person类的子类就回答这个问题,请详细的讲解一下从创建对象,到添加到集合的过程,谢谢)

问题2:

Person per=new Student();

这行代码看起来是用了Student的构造函数Student()创建了一个Student的对象,但是per却调用不了Student类的方法,只能调用Person的东西,怎么回事,求高手详细解答!

问题3

C#多态是什么意思,请举个简单的例子解释一下

1.Student是Person类的子类,这句话不说就是不对.,因为没有这句话, Student无法"转换"成Person,其实也不是转换,而是设计模式里面的has-a和is-a得关系,OOP里面类与类之间的关系无非两种,A包含B,A是B.这里Student is Person.这就是多态的概念.一个是Student的肯定是Person.所以当然可以添加进来.

2.Person per=new Student();定义一个Person指向Student, Student扩展了Person的成员,但是Person本身的成员还是那么多,不可能包含student扩展的成员.

3.多态就是一种类型,多种形态.就像Person一样,可以理解成人类这个总体,是一个类型.他可能是一个学生,老师,工人,农民等等.但都是Person.这就是一种类型多种形态.