9yue5
在C#中,任何一个类型直接或者间接继承于Object。
泛型 Generic
定义:泛型能够将类型作为参数来传递
创建类型时用一个特定的符号如“T”来作为一个占位符代替实际的类型
等待在实例化时再用一个实际的类型来代替
优点:1、重用代码,保护类型的安全以及提高性能(装箱拆箱本来就是对性能的消耗)
2、 降低强制转换或装箱操作的成本和风险
3、可以对泛型参数进行限定以访问特定数据类型的方法
泛型的限制
泛型成员因类型不确定,可能是类、结构体、字符、枚举……
所以不能使用算术运算符、比较运算符等进行运算;可以使用赋值运算符 =
泛型类型参数
泛型类型参数可以是编译器识别的任何数据类型
泛型类型参数命名也要遵守命名规则
1. 泛型类型参数可以有多个
2. 泛型类型参数可以是编译器识别的任何数据类型
3. 泛型类型参数命名需要遵守命名规则
(1) 使用描述性名称命名泛型类型,并且使用T作为前缀
(2) 单个字母名称完全可以让人了解其表示的含义使用单个大写字母命名
泛型类型参数的约束
约束的好处
可以增加约束类型及其继承层次结构中的所有类型所支持的允许操作和方法调用的数量
null 是空的引用 (空对象),值类型比较为false
引用类型比较恒等空的话 为0,不恒等为false
泛型类写在<>后面{}前面
方法中写在()后
注:提示:由于在泛型当中需要比较大小,所以该泛型必须是实现了接口(IComparable)
泛型方法
泛型方法是使用泛型类型参数声明的方法,
当方法中存在某些参数的类型不明确的时候就可以使用泛型方法。
未知具体类型的参数就使用泛型类型参数替代。
泛型方法重载
泛型类
泛型类封装了不是特定于具体数据类型的操作,
当类中存在未知参数类型的时候就可以使用泛型类
泛型类最常用于集合。 从集合中添加和移除项这样的操作都以大体上相同的方式执行,与所存储数据的类型无关。
创建泛型类的过程为:从一个现有的具体类开始,
逐一将每个类型更改为类型参数,直至达到通用化和可用性的最佳平衡。
泛型类实例化:
泛型类设计规则(怎么用泛型类)
1. 将哪些类型通用化为泛型类型参数
2. 如果存在约束,应对泛型类型参数应用什么约束
3. 是否将泛型行为分解为基类和子类
4. 是否实现一个或多个泛型接口