http://blog.csdn.net/aladdinty/article/details/3486532 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 泛型 { class 泛型接口 { public static void Main() { PersonManager man = new PersonManager(); Person per =
C#提供了一组关键字in&out,在泛型接口和泛型委托中,若不使用关键字修饰类型参数T,则该类型参数是不可变的(即不允许协变/逆变转换),若使用in修饰类型参数T,保证"只将T用于输入",则允许T的逆变转换:若使用out修饰类型参数T,保证"只将T用于输出",则允许T的协变转换.下面我们解释两个问题: 为什么类型参数T仅用于输出时可以进行协变转换? 为什么类型参数T仅用于输入时可以进行逆变转换? //定义两个类型 class Animal {} class
转自:http://www.cnblogs.com/jingzhongliumei/archive/2012/07/02/2573149.html 先做点准备工作,定义两个类:Animal类和其子类Dog类,一个泛型接口IMyInterface<T>, 他们的定义如下: public class Animal { } public class Dog : Animal { } interface IMyInterface<T> { } 一. 协变和逆变的定义 从.Net
先做点准备工作,定义两个类:Animal类和其子类Dog类,一个泛型接口IMyInterface<T>, 他们的定义如下: public class Animal { } public class Dog : Animal { } interface IMyInterface<T> { } 一. 协变和逆变的定义 从.Net Framework 4.0开始引入了一个新特性:协变与逆变,有人翻译为协变和反变,他们实际上所指的就是不同类型之间的一种转变(Variance).
关于协变逆变,SolidMango的解释是比较可取的.有了协变,比如,在需要返回IEnumerable<object>类型的时候,可以使用IEnmerable<string>来替代:有了逆变,比如,在需要接收IComparable<string>类型形参方法中,可以使用IComparable<object>类型实参来替代. 协变 先来体会协变.有2个具有继承关系的父类和子类. public class Animal { public string Name