码迷,mamicode.com
首页 > 其他好文 > 详细

第6章 泛型

时间:2018-12-03 12:45:43      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:实例   前缀   派生   操作   参数   对象类型   值类型   string   1.2   

泛型可以创建独立于被包含类型的类和方法

性能、类型的安全性、二进制代码重用、代码的拓展、命名约定

6.1.1 性能

var list = new ArrayList();
list.Add(4);  //装箱
int il = (int) list [0]; //拆箱

var list = new List<int>();
list.Add(44); //不用装箱
int il = list[0]; //不用拆箱

ArrayList类存储对象,把对象作为参数,需要大量装箱和拆箱。

List<T>类不使用对象,而是在使用时定义类型,定义的类型在JIT编译器动态生成的类中使用,不再进行装箱和拆箱操作

 

6.1.2 类型安全

ArrayList可以Add任意类型,foreach遍历int类型时遇到不是int就会异常。

List<T>泛型类型T定义了允许使用的类型

 

6.1.3 二进制代码的重用

泛型类型可以定义一次,可以用许多不用的类型实例化

var list = new List<int>();
var stringList = new List<string>();
var myClassList = new List<MyClass>();

 

6.1.4 代码的拓展

在不同的特定类型实例化泛型时,会创建多少代码?因为泛型类的定义会放在程序集中,所以用特定类型实例化泛型类不会在IL代码中赋值这些类。但是,在JIT编译器把泛型类编译为本地代码时,会给每个值类型创建一个新类。引用类型共享同一个本地类的所有相同的实现代码。这是因为引用类型在实例化的泛型类中只需要4个字节的内存地址(32位系统),就可以引用一个引用类型。值类型包含在实例化的泛型类的内存中,同时因为每个值类型对内存的要求都不通,所以要为每个值类型实例化一个新类。

(看不懂)

 

6.1.5 命名约定

泛型类型的名称用字母T作为前缀 public class List<T> () 

如果没有特殊的要求,泛型类型允许用任意类替代,且只使用了一个泛型类型,就可以用字符T作为泛型类型的名称 public class LinkedList<T> 

如果泛型类型有特定的要求(例如,它必须实现一个接口或派生自基类,或者使用了两个或多个泛型类型),就应该给泛型类型使用描述性的名称

public class SortedList<TKey, TValue>()

 

6.2 创建泛型类

每个处理对象类型的类都可以有泛型实现方式,这样有利于消除类型强制转换操作

 

6.3 泛型类的功能

 

第6章 泛型

标签:实例   前缀   派生   操作   参数   对象类型   值类型   string   1.2   

原文地址:https://www.cnblogs.com/code1992/p/10057602.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!