Visual C# 2005程序设计教程 作者 978-7-302-19477-4 ch09.pptVIP

  • 0
  • 0
  • 约3.47千字
  • 约 16页
  • 2015-12-13 发布于广东
  • 举报

Visual C# 2005程序设计教程 作者 978-7-302-19477-4 ch09.ppt

在小册子 * AutoCAD计算机辅助设计 C#程序设计教程 清华大学出版社 第9章 泛型编程 本章要点: 泛型的概念 泛型方法 泛型约束 使用泛型 在线教务辅导网: 教材其余课件及动画素材请查阅在线教务辅导网 QQ:349134187 或者直接输入下面地址: 9.1 泛型概述 9.1.1 泛型的引入 开发人员在编写程序时,经常遇到两个模块的功能非常相似,只是处理的数据类型不同,如一个是处理int数据,另一个是处理string数据,或者其他自定义的数据类型,针对这种情况,可以分别写多个类似的方法来处理每个数据类型,只是方法的参数类型不同;在C#中也可以定义存储的数据类型为Object类型,这样就可以通过装箱和拆箱操作来变相实现上述需求。同时C#还提供了更适合的泛型机制,专门用来解决这个问题。 9.1 泛型概述 9.1.2 什么是泛型 通过泛型可以定义类型安全类,而不会损害类型安全、性能或工作效率。开发人员只须一次性地将服务器实现为一般服务器,同时可以用任何类型来声明和使用它。为此,需要使用“”和“”括号,以便将一般类型参数括起来。泛型格式如下: public class StackT {  private T[] data;  public T Pop(){...}  public void Push(T item){...}  public Stack(int i)  {   this.data = new T[i];  } } 9.1 泛型概述 9.1.2 什么是泛型 泛型类的格式与一般类一致,只是引入了通用数据类型T就可以适用于任何数据类型,并且类型安全的。泛型类的调用方法如下: //实例化处理int类型数据的类对象 Stackint a = new Stackint(100); a.Push(10); //这一行编译不通过,因为类a只接收int类型的数据 a.Push(8888); //不需要进行类型转换 int x = a.Pop(); 9.1 泛型概述 9.1.2 什么是泛型 这个类与使用object实现的类的区别: 它是类型安全的。如果实例化为int类型的栈,就不能处理string及其他类型的数据。 无需装箱和折箱。这个类在实例化时,按照所传入的数据类型生成本地代码,本地代码数据类型已确定,所以无需装箱和折箱。 无需类型转换。 9.1 泛型概述 9.1.3 泛型的实现 在.NET 2.0中,泛型在IL(中间语言)和CLR本身中具有本机支持。在编译一般C#服务器端代码时,编译器会将其编译为IL,就像其他任何类型一样。但是,IL只包含实际特定类型的参数或占位符。此外,一般服务器的元数据包含一般信息。 客户端编译器使用该一般元数据来支持类型安全。当客户端提供特定类型而不是一般类型参数时,客户端的编译器将用指定的类型实参来替换服务器元数据中的一般类型参数。这会向客户端的编译器提供类型特定的服务器定义,就好像从未涉及到泛型一样。这样,客户端编译器就可以确保方法参数的正确性,实施类型安全检查。 9.1 泛型概述 9.1.3 泛型的实现 如果客户端指定引用类型,则JIT编译器将服务器IL中的一般参数替换为Object,并将其编译为本机代码。在以后的任何针对引用类型而不是一般类型参数的请求中,都将使用该代码。请注意,采用这种方式,JIT编译器只会重新使用实际代码。实例仍然按照它们离开托管堆的大小分配空间,并且没有强制类型转换。 9.1 泛型概述 9.1.4 泛型方法 泛型方法是使用类型参数声明的方法。C#泛型机制不支持在除方法外的其他成员(包括属性、事件、索引器、构造器、析构器)的声明上包含类型参数,但这些成员本身可以包含在泛型类型中,并使用泛型类型的类型参数。泛型方法既可以包含在泛型类型中,也可以包含在非泛型类型中。 .NET中的泛型机制使开发人员可以重用代码。类型和内部数据可以在不导致代码膨胀的情况下更改,而不管使用的是值类型还是引用类型。开发人员可以一次性地开发、测试和部署代码,通过任何类型(包括将来的类型)来重用它,并且全部具有编译器支持和类型安全。 9.2 泛型约束 C#泛型要求对“所有泛型类型或泛型方法的类型参数”的任何假

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档