素手烹茶|C#笔记~泛型( 二 )


素手烹茶|C#笔记~泛型泛型类
素手烹茶|C#笔记~泛型泛型接口
素手烹茶|C#笔记~泛型泛型委托
对于泛型类和泛型接口 , 如果其他类继承或实现了它 , 要求这个类必须指定具体的类型 , 或者不指定类型但此类也是泛型类 。
七、泛型约束
在第六点我们已经使用了泛型约束 , 请看上图where部分 。 泛型约束是为类型安全而设计的 , 它有如下几种约束:
素手烹茶|C#笔记~泛型结构约束 。 值类型 , 必须在其他约束之前
素手烹茶|C#笔记~泛型类约束 。 引用类型 , 必须在其他类型约束之前
素手烹茶|C#笔记~泛型无参数构造函数约束 。 与其他约束使用时 , 必须放在最后
素手烹茶|C#笔记~泛型基类约束 。 基类或派生类 , 该基类必须是可继承的
素手烹茶|C#笔记~泛型接口约束 。 可以指定多个接口约束 , 类型必须实现该接口
八、协变(out)、逆变(in)
素手烹茶|C#笔记~泛型使用泛型之后 , 我们发现基类和子类的泛型并没有继承关系 , 但实际业务中 , 他们还是父子关系 。
为解决上述问题 , 引入了协变、逆变 。
1.协变 , 让赋值表达式右边可以用子类
协变只能修饰返回参数 。 为什么不能修饰传入参数呢?因为父类赋值给子类 。
素手烹茶|C#笔记~泛型
素手烹茶|C#笔记~泛型2.逆变 , 让赋值表达式右边可以用父类
逆变只能修饰传入参数 。
素手烹茶|C#笔记~泛型
素手烹茶|C#笔记~泛型3.协变逆变只能用于接口、委托 。


推荐阅读