第5章+泛型-1(课件)-+《算法与程序设计-C#》同步教学(清华大学版).pptx
C#程序设计第5章泛型
2泛型泛型引例泛型方法★泛型类泛型集合
3本章目标理解泛型的基本概念及使用泛型的优点掌握泛型方法的定义和使用掌握泛型类的定义和使用掌握常用的泛型集合的使用
4泛型泛型方法★
5引例staticvoidSwap(refintx,refinty){inttemp;temp=x;x=y;y=temp;}staticvoidSwap(refdoublex,refdoubley){doubletemp;temp=x;x=y;y=temp;}思考:编写交换两个int数的方法?编写交换两个double数的方法?交换两个short数的方法?交换两个decimal数的方法?.....带来的问题:代码膨胀
6如果C#没有泛型ArrayListlist1=newArrayList();list1.Add(3);list1.Add(105);foreach(intxinlist1){Console.WriteLine(x);}Teacherteach=newTeacher();students.Add(stu1);students.Add(teach);foreach(Objectstuoinstudents){Studentstu=(Student)stuo;Console.WriteLine(stu.Name);}思考:集合的使用ArrayList、Stack、Queue、HashTable任何引用或值类型都将隐式地向上强制转换为Object(解决了代码膨胀)如果项是值类型,则添加时需要进行装箱操作,检索时需要进行拆箱操作带来的问题:装箱、拆箱兼容任何类型能否加入一个Teacher对象?学生对象集合
7类型安全2Student集合张三李四王五赵老师添加对象遍历集合对象存储不易控制类型转换容易出错Teacher对象运行错误
8泛型的概念通过泛型可以定义类型安全的数据结构,而无须使用实际的数据类型所谓泛型,即通过参数化类型来实现在同一份代码上操作多种数据类型,泛型编程是一种编程范式,它利用“参数化类型”将类型抽象化,从而实现更为灵活的复用。泛型的三大优点:可重用性类型安全效率
9泛型的定义C#中,可以定义:泛型接口泛型类泛型方法泛型事件泛型委托泛型定义是通过泛型参数(T)来进行定义的创建泛型类的实例时,则需要与泛型参数对应的实际类型
10泛型方法泛型方法是使用类型参数声明的方法。编译器能够根据传入的方法实参推断类型形参编译器只能根据实参推断泛型参数,此时可以省略指定实际泛型参数编译器不能根据返回值推断泛型参数演示案例:泛型方法[访问修饰符]返回值方法名类型参数列表(参数列表)可用于该方法的返回类型声明、参数类型声明和方法代码中的局部变量的类型声明。
11泛型方法//交换两个int数的方法staticvoidSwap(refintx,refinty){inttemp;temp=x;x=y;y=temp;}//交换两个double数的方法staticvoidSwap(refdoublex,refdoubley){doubletemp;temp=x;x=y;y=temp;}//交换任意两个数的方法staticvoidSwapT(refTx,refTy){Ttemp;temp=x;x=y;y=temp;}泛型inta=1;intb=2;Swapint(refa,refb);doublec=1.1;doubled=2.2;Swapdouble(refc,refd);调用
12泛型方法的重载泛型方法可以使用类型参数进行重载使用约束对方法中的类型参数启用更专门的操作
13泛型方法如果泛型方法的泛型参数与类型的泛型参数相同,则编译器生成警告方法的泛型参数隐藏了外部类型的泛型参数可以为方法的泛型参数提供另一个标识编译错误