那些年搞不懂的术语、概念:协变、逆变、不变体
发布时间:2016-10-29 14:30:42 所属栏目:教程 来源:站长网
导读:副标题#e# 简述什么是协变性、逆变性、不变性 协变性,如:string-object (子类到父类的转换) 逆变性,如:object-string (父类到子类的转换) 不变性,基于上面两种情况,不可变。具体下面再做分析。 泛型委托的可变性 先使用框架定义的泛型委托Func和A
|
C#4.0之前 IEnumerable<T> 、 IComparable<T> 、 IQueryable<T> 等接口都不支持可变性,在4.0及之后才支持。因为4.0之前定义的泛型接口没有添加out、in关键字,有兴趣可以切换版本看看。 延伸思考为什么in[输入参数]就只能逆变?分析如下: // 人
public class People { }
//老师(继承People[人])
public class Teacher : People
{
//薪水
public decimal Salary { get; set; }
}
//运动
public interface IMotion<in T>
{
void Match(T t);
}
//跑步
public class Run<T> : IMotion<T>
{
public void Match(T t)
{
//假设中间有很多逻辑.....
}
}
为什么out[返回值]只能协变?分析如下: // 人
public class People { }
//老师(继承People[人])
public class Teacher : People
{
//薪水
public decimal Salary { get; set; }
}
//运动
public interface IMotion<out T>
{
T Show();
//void Match(T t);
}
//跑步
public class Run<T> : IMotion<T>
{
public T Show()
{
return default(T);
}
//public void Match(T t)
//{
// //假设中间有很多逻辑.....
/ |



浙公网安备 33038102330570号