ch09 泛型编程.ppt
《ch09 泛型编程.ppt》由会员分享,可在线阅读,更多相关《ch09 泛型编程.ppt(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、AutoCAD计算机辅助设计面向对象的程序设计面向对象的程序设计C#山东科技大学测绘学院山东科技大学测绘学院 第第9 9章章 泛型编程泛型编程本章要点:本章要点:l 泛型的概念泛型的概念l 泛型方法泛型方法l 泛型约束泛型约束l 使用泛型使用泛型AutoCAD计算机辅助设计面向对象的程序设计面向对象的程序设计C#山东科技大学测绘学院山东科技大学测绘学院 9.19.1 泛型概述泛型概述 9.1.1 9.1.1 泛型的引入泛型的引入 开发人员在编写程序时,经常遇到两个模块的功能非常相似,只是处理的数据类型不同,如一个是处理int数据,另一个是处理string数据,或者其他自定义的数据类型,针对这种
2、情况,可以分别写多个类似的方法来处理每个数据类型,只是方法的参数类型不同;在C#中也可以定义存储的数据类型为Object类型,这样就可以通过装箱和拆箱操作来变相实现上述需求。同时C#还提供了更适合的泛型机制,专门用来解决这个问题。AutoCAD计算机辅助设计面向对象的程序设计面向对象的程序设计C#山东科技大学测绘学院山东科技大学测绘学院 9.19.1 泛型概述泛型概述 9.1.2 9.1.2 什么是泛型什么是泛型 通过泛型可以定义类型安全类,而不会损害类型安全、性能或工作效率。通过泛型可以定义类型安全类,而不会损害类型安全、性能或工作效率。开发人员只须一次性地将服务器实现为一般服务器,同时可以
3、用任何类型来声开发人员只须一次性地将服务器实现为一般服务器,同时可以用任何类型来声明和使用它。为此,需要使用明和使用它。为此,需要使用“”括号,以便将一般类型参数括起来。括号,以便将一般类型参数括起来。泛型格式如下:泛型格式如下:public class Stackpublic class Stack private T data;private T data;public T Pop().public T Pop().public void public void Push(TPush(T item).item).public public Stack(intStack(int i)i)th
4、is.datathis.data=new =new TiTi;AutoCAD计算机辅助设计面向对象的程序设计面向对象的程序设计C#山东科技大学测绘学院山东科技大学测绘学院 9.19.1 泛型概述泛型概述 9.1.2 9.1.2 什么是泛型什么是泛型 泛型类的格式与一般类一致,只是引入了通用数据类型泛型类的格式与一般类一致,只是引入了通用数据类型T T就可以适用于任就可以适用于任何数据类型,并且类型安全的。泛型类的调用方法如下:何数据类型,并且类型安全的。泛型类的调用方法如下:/实例化处理实例化处理intint类型数据的类对象类型数据的类对象 Stack a=new Stack(100);Sta
5、ck a=new Stack(100);a.Push(10);a.Push(10);/这一行编译不通过,因为类这一行编译不通过,因为类a a只接收只接收intint类型的数据类型的数据 a.Push(8888);a.Push(8888);/不需要进行类型转换不需要进行类型转换 int x=a.Pop();int x=a.Pop();AutoCAD计算机辅助设计面向对象的程序设计面向对象的程序设计C#山东科技大学测绘学院山东科技大学测绘学院 9.19.1 泛型概述泛型概述 9.1.2 9.1.2 什么是泛型什么是泛型 这个类与使用这个类与使用objectobject实现的类的区别:实现的类的区别
6、:l 它是类型安全的。如果实例化为它是类型安全的。如果实例化为intint类型的栈,就不能处理类型的栈,就不能处理stringstring及其及其他类型的数据。他类型的数据。l 无需装箱和折箱。这个类在实例化时,按照所传入的数据类型生成本无需装箱和折箱。这个类在实例化时,按照所传入的数据类型生成本地代码,本地代码数据类型已确定,所以无需装箱和折箱。地代码,本地代码数据类型已确定,所以无需装箱和折箱。l 无需类型转换。无需类型转换。AutoCAD计算机辅助设计面向对象的程序设计面向对象的程序设计C#山东科技大学测绘学院山东科技大学测绘学院 9.19.1 泛型概述泛型概述 9.1.3 9.1.3
7、泛型的实现泛型的实现 在在.NET 2.0.NET 2.0中,泛型在中,泛型在ILIL(中间语言)和(中间语言)和CLRCLR本身中具有本机支持。本身中具有本机支持。在编译一般在编译一般C#C#服务器端代码时,编译器会将其编译为服务器端代码时,编译器会将其编译为ILIL,就像其他任何,就像其他任何类型一样。但是,类型一样。但是,ILIL只包含实际特定类型的参数或占位符。此外,一般只包含实际特定类型的参数或占位符。此外,一般服务器的元数据包含一般信息。服务器的元数据包含一般信息。客户端编译器使用该一般元数据来支持类型安全。当客户端提供特客户端编译器使用该一般元数据来支持类型安全。当客户端提供特定
8、类型而不是一般类型参数时,客户端的编译器将用指定的类型实参来定类型而不是一般类型参数时,客户端的编译器将用指定的类型实参来替换服务器元数据中的一般类型参数。这会向客户端的编译器提供类型替换服务器元数据中的一般类型参数。这会向客户端的编译器提供类型特定的服务器定义,就好像从未涉及到泛型一样。这样,客户端编译器特定的服务器定义,就好像从未涉及到泛型一样。这样,客户端编译器就可以确保方法参数的正确性,实施类型安全检查。就可以确保方法参数的正确性,实施类型安全检查。AutoCAD计算机辅助设计面向对象的程序设计面向对象的程序设计C#山东科技大学测绘学院山东科技大学测绘学院 9.19.1 泛型概述泛型概
9、述 9.1.3 9.1.3 泛型的实现泛型的实现 如如果果客客户户端端指指定定引引用用类类型型,则则JITJIT编编译译器器将将服服务务器器ILIL中中的的一一般般参参数数替替换换为为ObjectObject,并并将将其其编编译译为为本本机机代代码码。在在以以后后的的任任何何针针对对引引用用类类型型而而不不是是一一般般类类型型参参数数的的请请求求中中,都都将将使使用用该该代代码码。请请注注意意,采采用用这这种种方方式式,JITJIT编编译译器器只只会会重重新新使使用用实实际际代代码码。实实例例仍仍然然按按照照它它们们离离开开托托管管堆堆的的大大小小分配空间,并且没有强制类型转换。分配空间,并且
10、没有强制类型转换。AutoCAD计算机辅助设计面向对象的程序设计面向对象的程序设计C#山东科技大学测绘学院山东科技大学测绘学院 9.19.1 泛型概述泛型概述 9.1.4 9.1.4 泛型方法泛型方法 泛泛型型方方法法是是使使用用类类型型参参数数声声明明的的方方法法。C#C#泛泛型型机机制制不不支支持持在在除除方方法法外外的的其其他他成成员员(包包括括属属性性、事事件件、索索引引器器、构构造造器器、析析构构器器)的的声声明明上上包包含含类类型型参参数数,但但这这些些成成员员本本身身可可以以包包含含在在泛泛型型类类型型中中,并并使使用用泛泛型型类类型型的的类类型型参参数数。泛泛型型方方法法既既可
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ch09 泛型编程 编程
限制150内