第十二章 泛型

1. 概述

  泛型(generic)是CLR和编程语言提供的一种特殊机制,它支持另一种形式的代码重用,即“算法重用”。

  泛型为开发人员提供了以下优势:

  ① 源代码保护。(针对C++的模板技术)

  ② 类型安全。

  ③ 更加清晰的代码。(减少转型次数)

  ④ 更佳的性能。(值类型无需装箱)

2. 名词解释

  ① 代码爆炸:泛型类型在编译时,CLR要为每种不同的方法/类型组合生成本地代码。它可能造成应用程序的工作集显著增大,影响性能。

3. 主要内容

  3.1 Framework类库中的泛型

    FCL定义的几个泛型集合类,大多数在 System.Collections.Generic 和 System.Collections.ObjectModel命名空间中。

    要使用现成安全的集合类,可以去 System.Collections.Concurrent命名空间找寻。

    System.Array类(所有数组类型的基类)提供了大量静态泛型方法。

  3.2 Wintellect 的 Power Collections 库

    Wintellect制作了Power Collections 库,使CLR程序员也能使用C++标准模板库(STL)的部分集合类。

  3.3 泛型基础结构

    3.3.1 开放类型和封闭类型

      具有泛型类型参数的类型成为 开放类型,CLR 禁止构造开放类型的任何实例。

    3.3.2 泛型类型和继承

      泛型类型仍然是类型,所以它能从其他任何类型派生。

    3.3.3 泛型类型同一性

    3.3.4 代码爆炸

      CLR内建了一些优化措施来缓解代码爆炸:

      ① 假如为一个特定的类型实参调用了一个方法,以后再次使用相同的类型实参来调用时,CLR只会为这个方法/类型组合编译一次代码。

      ② CLR认为所有引用类型实参都是完全相同的,所以代码能够共享。

  3.4 泛型接口

    一个引用类型或值类型可通过指定类型实参的方式来实现泛型接口,也可以保持类型实参的未指定状态来实现一个泛型接口。

  3.5 泛型委托

  3.6 委托和接口的逆变和协变泛型类型实参(好拗口)

    未完待续。。。

时间: 2024-12-29 17:08:11

第十二章 泛型的相关文章

20190825 On Java8 第十二章 集合

第十二章 集合 java.util 库提供了一套相当完整的集合类(collection classes)来解决这个问题,其中基本的类型有 List . Set . Queue 和 Map. 不要在新代码中使用遗留类 Vector ,Hashtable 和 Stack . 泛型和类型安全的集合 new ArrayList<>() 有时被称为"菱形语法"(diamond syntax).在 Java 7 之前,必须要在两端都进行类型声明 ArrayList<Apple&g

C和指针 (pointers on C)——第十二章:使用结构和指针

第十二章 使用结构和指针 这章就是链表.先单链表,后双向链表. 总结: 单链表是一种使用指针来存储值的数据结构.链表中的每个节点包含一个字段,用于指向链表的下一个节点. 有一个独立的根指针指向链表的第1个节点.单链表只能从一个方向遍历. 如何insert单链表:1.新节点的link字段必须设置为指向它的后面节点.2.前一个节点的link字段必须指向这个新节点. 为了防止可能会插入链表的起始位置这种情况,在C中,可以保存一个指向必须进行修改的link字段的指针,而不是保存一个指向前一个节点的指针.

《构建之法》第十一、十二章学习总结

第十一章的内容是软件设计与实现. 在第一节中,讲的是关于分析和设计方法,向我们介绍在"需求分析"."设计与实现"阶段."测试""发布"阶段该搞清楚的问题. 在第二节中,讲的是关于图形建模和分析方法.在表达实体和实体之间的关系时,可以用到思维导图(Mind Map).实体关系图(ERD).UCD ;在表达数据的流动时,可以用到DFD工具:在表达控制流的时候可以用到FSM工具:前面提到的这些图形建模方法各有特点,UML却可以有一个

C primer plus 第五版十二章习题

看完C prime plus(第五版)第十二章,随带完成了后面的习题. 1.不使用全局变量,重写程序清单12.4的程序. 先贴出12.4的程序,方便对照: 1 /* global.c --- 使用外部变量 */ 2 #include <stdio.h> 3 int units = 0; //一个外部变量 4 void critic(void); 5 int main(void) 6 { 7 extern int units; 8 9 printf ("How many pounds

构造之法第十一、十二章

第十一章 软件设计与实现 图形建模和分析方法 1表达实体和实体之间的关系(思维导图) 2实体关系图 3Use Case Diagram 表达数据的流动 (1)和管理机构相关的数据流 (2)和读者相关的数据流 (3)和新书入库相关的数据流 (4)和时间相关的数据流 表达数据的流动 (1)和管理机构相关的数据流 (2)和读者相关的数据流 (3)和新书入库相关的数据流 (4)和时间相关的数据流 其他设计方法 1.形式化的方法 2.文学化编程 第十二章 用户体验 用户体验的要素 1.用户的第一印象 2.

Java 第十二章 继承 笔记

Java 第十二章  继承 笔记 一.使用继承:     1)方便修改代码     2)减少代码量 二.super 继承object 类:super 访问父类的无参构造:super 指的是object 的无参构造.     例:子类调用父类:super.属性 / super.方法    注意:子类不能继承父类私有属性:得用set.get方法来调用:    super只能写在代码块的第一句:super只能调用非私有的方法:    super只能出现在子类的方法和构造方法中. 三.不能被继承的父类成

JavaScript DOM编程艺术-学习笔记(第十二章)

第十二章 1.本章是综合前面章节的所有东西的,一个综合实例 2.流程:①项目简介:a.获取原始资料(包括文本.图片.音视频等) b.站点结构(文件目录结构) c.页面(文件)结构 ②设计(切图) ③css -  base.css用于引入使用的css文件 color.css  - 用于设置样式 layout.css - 用于设置布局 Typography.css - 用于设置版式 3.题外话:①在实际开发中,即使是一个空白项目也往往不会从一无所有做起,而借助的平台一般会提供目录结构,所以需要把自己

R in action读书笔记(16)第十二章 重抽样与自助法之 置换检验

第十二章:重抽样与自助法 本章,我们将探究两种应用广泛的依据随机化思想的统计方法:置换检验和自助法 12.1 置换检验 置换检验,也称随机化检验或重随机化检验. 有两种处理条件的实验,十个受试者已经被随机分配到其中一种条件(A或B)中,相应的结果变量(score)也已经被记录.实验结果如下: 如果两种处理方式真的等价,那么分配给观测得分的标签(A处理或B处理)便是任意的.为检验两种处理方式的差异,我们可遵循如下步骤: (1) 与参数方法类似,计算观测数据的t统计量,称为t0: (2) 将10个得

第二十二章 TCP/IP层的实现

                      第二十二章    TCP/IP层的实现        我比较喜欢先难后易,如果把GPU显示管理.和网络管理拿下后:我会从头整理.改写一遍APO操作系统.这样,就会形成APO操作系统的锥形.也获得了全局观.内核CPU线路.和用户CPU线路,你可以将它们看成是独立的2个32位CPU核:内核CPU主要任务是实时处理.硬件中断,256个实时线程包含了一些中断程序的后半部.用户CPU主要是动态优先级进程.线程调度,各种应用程序的运行:2个核之间是通过消息交互.句