写点什么

泛型原理解析 (Review)

用户头像
Puciu
关注
发布于: 刚刚

1.Generic 泛型是什么

一句话概括:相同需求不同类型的抽象.

1.1.net2.0 后出现了泛型的概念

是类,是 API,是结构,是 CLR 定义的.

创建独立于被包含类型的类和方法,不必给不同的类型编写功能相同的许多方法或类,

只创建一个方法或类即可. 这段是书里的写的,文绉绉的.

IL 后其实是一个类,带占位符

因为 T 在调用的时候才指定类型,所以可以支持不同的类型参数,保证了类型安全.

1.2 设计思想:

延迟声明,推迟一切可以推迟的  声明时不指定,调用时指定.(metadata)

2.为什么是泛型(解决了什么问题,怎么用)

解决了

性能,类型安全,二进制代码重用,代码扩展,命名约定

2.1 性能

2.1.1 避免拆装箱
//非泛型var list=new ArrayList();list.Add(object value);//使用泛型var genList=new List<int>();genList.Add(T tItem);
复制代码
2.1.2 类型安全
//非泛型var list=new ArrayList();list.Add(44);list.Add("string");//类型不同foreach(int i in list){  Console.WriteLine(i);//运行时异常}//使用泛型var list=new List<int>();list.Add(44);list.Add("mystring");foreach(int i in list){  Console.WriteLine(i);//编译错误}
复制代码

2.2 二进制代码重用

泛型类定义一次,可以允许不同的类型实例化,不需要像 C++需要访问源码.

2.3 代码扩展

2.4 命名约定

泛型类新的名称使用 T 作为前缀

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

Public deleate void EventHandler<TEventArgs>(object sender,TEventArg e);
复制代码


3.泛型类,泛型方法 相同需求不同类型的抽象

3.1 默认值

T type=default; //不能是null,因为null只能用于引用类型,而泛型可以实例化为值类型
复制代码

3.2 约束

where T:BaseModel

类型安全,方便调用,密封类不能约束没有意义


public static void Show<T>(T tParameter)  where T:BaseModel{	Console.WriteLine($"{tParameter.GetType().Name} {tParameter}  ");  	Console.WriteLine($"{tParameter.PropName} {tParameter.PropID}  ");    tParameter.Method();  }
复制代码


发布于: 刚刚阅读数: 2
用户头像

Puciu

关注

还未添加个人签名 2020.04.28 加入

还未添加个人简介

评论

发布
暂无评论
泛型原理解析(Review)