asp.net 泛型的 协变与逆变
来源:互联网 发布:淘宝刷单增权重 编辑:程序博客网 时间:2024/05/17 04:08
协变与逆变就是为了在声明一些接口的时候,可以增强他们的适用面
其中 out T 只能用于返回值泛型参数
in T 只能用于传入参数
举例说明
如 创建2个类
public class People { } public class Chinese:People { }
List<People> PeopleList = new List<People>();这样调用,是绝对没有问题的
但是这样调用呢?你是不是会认为 任何父类出现的地方都可以用子类来代替?
List<People> PeopleList1 = new List<Chinese>();
其实是不可以的,他们的类型变成了 ChinextList和PeopleList
为了应对这种状况,就需要用到协变与逆变
协变与逆变
协变
协变就是在需要传入一个父级的泛型参数位置可以传入一个子级,应用到out关键字 并且out关键字修饰的泛型参数 只能应用于返回值
定义一个接口一个类
public interface Iinterface<out T> { T Get(); } public class NewClass<T> : Iinterface<T> { public T Get() { return default(T); } }因为用了out关键字 并且T是返回值 下面就可以通过
Iinterface<People> people1=new NewClass<Chinese>();
逆变
逆变就是在一个需要传入子级的泛型参数位置传入一个父级,应用到关键字in 并且in关键字修饰的泛型参数 只能用于传参使用
如下
public interface Iinterface<in T> { void Get(T t); } public class NewClass<T> : Iinterface<T> { public void Get(T t) { } }
因为用了in关键字 并且T是传参使用 所以下面是通过的
Iinterface<Chinese> people1 = new NewClass<People>();
总结:
协变与逆变的作用是为了在生命一些接口的时候可以增强他们的适用面
只适用于泛型
协变 应用到关键字out并且泛型T只能用于返回值 作用是可以在需要传入父类的地方传入子类
逆变 应用到关键字in并且泛型T只能用于传参使用 作用是可以在需要传入子类的地方传入父类
通俗点理解就是 通过out和in关键字告诉系统,这里我已经确认是没有问题的,这些问题你就不需要考了了
0 0
- asp.net 泛型的 协变与逆变
- 型变的理解,逆变与协变
- .net 4.0 之后的协变与逆变
- 泛型的协变,逆变
- J2EE泛型中的协变与逆变
- 协变与逆变
- 协变与逆变
- 协变与逆变
- 协变与逆变
- 协变与逆变
- 协变与逆变
- 协变与逆变
- 协变与逆变
- 理解 C# 泛型接口中的协变与逆变(抗变)
- 泛型类型的转换,协变和逆变
- C# 泛型的协变和逆变
- C# 泛型的协变和逆变
- C# 泛型的协变和逆变
- Linux下查看内存的使用情况
- c++ const 全面总结!
- JUnit4中@Before、@After、@Test等注解的作用
- gh0st3.6执行流程
- Python模块大全
- asp.net 泛型的 协变与逆变
- 软件开发之硬件扫盲篇)固态硬盘需要了解的知识
- 基于wordpress的邮件发送流程
- NodeJS模拟request请求
- systemd boot process in linux
- iOS之访问自定义cell的textField.text的N种方法
- PHP之header函数详解
- 一些杂感
- 纯手工编写的PE可执行程序