范型概述及特点
来源:互联网 发布:evernote 知乎 编辑:程序博客网 时间:2024/05/01 06:12
初学范型,有点模模糊糊不太理解,找到一些资料希望和大家一起分享一下:
范型的设计是为了解决Object的多态性设计中的两个问题:
(1),性能上面的,boxing和unboxing需要大量的复制开销;
(2),安全性上面的,在上面一个例子看到了如果unboxing类型不同会抛出一个InvalidCastException异常; 范型的设计格式是使用<和>封闭其中一个范型参数,例如:public class Stack<T>;
范型的实例化格式是使用需要使用的类型替换<和>封闭其中一个范型参数,例如:
Stack<char> char_Stack = new Stack<char>();
多范型类定义格式,在<和>封闭多个范型参数,例如:class Node<K,T>
在C#2.0中范型是在中间语言(IL)和公共语言运行时(CLR)支持的.对于值类型:会在JIT编译时候替换参数类型,如果存在以及编译特定类型的机器代码,将直接返回这段代码.这样避免了在ISO C++中Template可能带来代码膨胀.
对于引用类型:会直接在JIT编译时候替换参数类型.
理解C# 2.0范型是在实现是基于CLR支持的很重要啊,因为.NET的本质是和语言无关的.任何语言最后都是编译为中间语言,这样基于IL和CLR支持的范型可以运用到所有基于CLR实现的语言.
使用范型的优点:
程序员只需要编写、测试、部署代码一次,即可以对不同的数据类型重复使用该代码。
同时,编译器还会对范型进行检查。当程序使用提供的类型参数实例化范型类时,这个类型参数只能是程序在类定义中指定的类型。例如,如果程序创建了一个 Customer 对象类型的 Stack,就无法将整数压入堆栈。通过强制执行这种操作,可以生成更可靠的代码。
此外,与其他严格的类型实现相比,泛型的 C# 实现降低了代码的膨胀速度。使用泛型创建具有类型的集合,可以在保持操作性能优势的同时避免创建每个类的特定变体。例如,程序可以创建一个参数化的 Stack 类,而无需创建用于存储整数的 IntegerStack、用于存储字符串的 StringStack 以及用于存储 Customer 类型的 CustomerStack。
.NET Framework 范型容器列表:
Comparer<T> Comparer 比较
Dictionary<K,T> HashTable hash表
LinkedList<T> LinkList 链表
List<T> ArrayList 数组链表
Queue<T> Queue 队列
SortedDictionary<K,T> SortedList 排序链表
Stack<T> Stack 栈
ICollection<T> ICollection 容器接口
IComparable<T> System.IComparable比较接口
IDictionary<K,T> IDictionary 字典接口
IEnumerable<T> IEnumerable 枚举接口
IEnumerator<T> IEnumerator 跌代接口
IList<T> IList 链表接口
- 范型概述及特点
- oc 概述及特点
- PDO概述特点及安装
- 集合框架_Set集合概述及特点
- 过滤器:精密过滤器特点及应用范围概述
- 黑马程序员——Set集合概述及特点
- MapGuide概述与特点
- DOM_概述&解析特点
- Spark概述、Spark特点
- 银行业务系统设计特点概述
- CALayer简要概述与特点
- JavaScript简介及特点
- 等高线种类及特点
- OpenGL特点及功能
- JavaScript特点及函数
- html5含义及特点
- String对象及特点
- String对象及特点
- JSP执行过程和隐式对象和错误机制
- 演示简单标签的使用
- servlet的定义及其生命周期
- 类的定义与成员实现
- 索引,连接查询
- 范型概述及特点
- Web.config如何使用
- smarty简单介绍
- 第二种方式实现异步通信
- 浅析堆和栈
- beanstalk通讯协议
- 虚拟路径
- 带属性的自定义标签
- smarty的了解