如果C#没有泛型 问题 思考:集合的使用 >ArrayList、Stack、Queue、HashTable >任何引用或值类型都将隐式地向上强制转换为06ject(解决了代码膨胀) >如果项是值类型,则添加时需要进行装箱操作,检索时需要进行拆箱操作 带来的问题:装箱、拆箱 学生对象集合 ArrayList list1 new ArrayList(); Teacherach new Teacher(); list1.Add(3); students.Add(stu1 ) 能否加入一个 list1.Add(105); students.Add(teach) Teacher>对象? foreach (int x in list1) foreach (Object stuo i students)】 Console.WriteLine(x); Student stu = Console.Write 兼容任何类型 6
6 如果C#没有泛型 ArrayList list1 = new ArrayList(); list1.Add(3); list1.Add(105); foreach (int x in list1) { Console.WriteLine(x); } Teacherteach = new Teacher(); students.Add(stu1 ); students.Add(teach); foreach (Object stuo in students) { Student stu = (Student)stuo; Console.WriteLine(stu.Name); } 思考:集合的使用 ➢ArrayList、Stack、Queue、HashTable ➢任何引用或值类型都将隐式地向上强制转换为 Object(解决了代码膨胀) ➢如果项是值类型,则添加时需要进行装箱操作,检索时需要进行拆箱操作 带来的问题:装箱、拆箱 兼容任何类型 能否加入一个 Teacher对象? 学生对象集合
类型安全2 对象存储不 类型转换 易控制 容易出错 遍历集合 Student集合 Teacherx对象 张三 赵老师 李四 王五 添加对象 x 班级共包括4个学员。 运行错误 确定
7 类型安全2 Student集合 张三 李四 王五 赵老师 添加对象 遍历集合 对象存储不 易控制 类型转换 容易出错 Teacher对象 运行错误
泛型的概念 通过泛型可以定义类型安全的数据结构,而无须使用实际 的数据类型 ■所谓泛型,即通过参数化类型来实现在同一份代码上操作 多种数据类型,泛型编程是一种编程范式,它利用“参数 化类型”将类型抽象化,从而实现更为灵活的复用。 ■泛型的三大优点: ■可重用性 ■类型安全 ■效率 8
8 泛型的概念 ▪ 通过泛型可以定义类型安全的数据结构,而无须使用实际 的数据类型 ▪ 所谓泛型,即通过参数化类型来实现在同一份代码上操作 多种数据类型,泛型编程是一种编程范式,它利用“参数 化类型”将类型抽象化,从而实现更为灵活的复用。 ▪ 泛型的三大优点: ◼ 可重用性 ◼ 类型安全 ◼ 效率
泛型的定义 ■ C#中,可以定义: ■泛型接口 ■泛型类 ■ 泛型方法 ■泛型事件 ■泛型委托 ■ 泛型定义是通过泛型参数(<T>)来进行定 义的 ■创建泛型类的实例时,则需要与泛型参数对 应的实际类型
9 泛型的定义 ▪ C#中,可以定义: ◼ 泛型接口 ◼ 泛型类 ◼ 泛型方法 ◼ 泛型事件 ◼ 泛型委托 ▪ 泛型定义是通过泛型参数(<T>)来进行定 义的 ▪ 创建泛型类的实例时,则需要与泛型参数对 应的实际类型