C#笔记 -- 协变、逆变
2017-03-07 16:41
253 查看
协变
理解:在泛型和委托中, 让使用某个泛型参数A的类型可以用一个使用由A派生的泛型参数B的类型实例化,(小=> 大)如
// IEnumerable<Animal> 与 List<Dog> 之间无继承关系,但是不会报错,协变 // IEnumerable<out T> IEnumerable<Animal> animals = new List<Dog>(); // 下行会报错 => List<Dog> 不继承 List<Animal> 类型, 无法类型转化 // List<T> List<Animal> animals = new List<Dog>();
条件: 使用 泛型修饰符
out, 并且只能用作返回类型,该泛型参数不能用作方法参数使用
逆变
理解: 在泛型和委托中, 让使用某个泛型参数A的类型可以用一个使用A父类级别的泛型参数B的类型实例化,(大=>小)如
// Action<Dog> 与 Action<Animal> 无继承关系,不报错无,逆变 // Action<in T> Action<Dog> actionDog = new Action<Animal>(a => { Console.WriteLine("animal"); }); // 下行报错 => Func<Dog> 与 Func<Animal> 无继承关系,报错 // Func<Out TResult> Func<Dog> actionDog1 = new Func<Animal>(() => new Dog());
条件:使用 泛型修饰符
in, 并且只能被使用,或者作为方法参数,不能用作返回类型
总结
返回结果的协变性
使用类型的逆变性
参考资料
相关文章推荐
- C#笔记 -- 协变、逆变
- C#笔记16:协变与逆变
- C#笔记 -- 协变、逆变
- C#笔记 -- 协变、逆变
- C#学习笔记---协变和逆变
- C#基础笔记——协变(Covariance)和逆变(Contravariance)
- C#笔记16:协变与逆变
- C# 4.0新特性-"协变"与"逆变"以及背后的编程思想
- C# 4.0 新特性之"协变"与"逆变"[转]
- Effective C# 学习笔记(二十九)在范型中的协变和逆变
- C# 4.0中的协变和逆变(一)
- C# 协变和逆变
- C# 4.0新特性——“协变”与“逆变”以及背后的编程思想(转)
- C# 4.0新特性-"协变"与"逆变"以及背后的编程思想
- 深入理解 C# 协变和逆变
- c# 委托 协变和逆变
- C#4.0新特性之(三)协变与逆变
- 适合C# Actor的消息执行方式(6):协变与逆变
- C# 4.0新特性——“协变”与“逆变”以及背后的编程思想
- C#中委托的匿名方法,及其在协变与逆变中的应用