日期:2014-05-17  浏览次数:20931 次

深入理解 C# 协变和逆变

协变是指能够使用与原始指定的派生类型相比,派生程度更大的类型。

?

?

?

逆变则是指能够使用派生程度更小的类型。

?

?

?

?

?

?

?

解释的很正确,大致就是这样,不过不够直白。

?

?

?

直白的理解:

?

?

?

协变”->”和谐的变”->”很自然的变化”->string->object :协变。

?

逆变”->”逆常的变”->”不正常的变化”->object->string 逆变。

?

?

?

?

?

?

?

上面是个人对协变和逆变的理解,比起记住那些派生,类型,原始指定,更大,更小之类的词语,个人认为要容易点。

?

?

?

?

?

?

?

下面是一则笑话:

?

?

?

一个星期的每一天应该这样念:

星期一 = 忙day;
星期二 = 求死day;
星期三 = 未死day;
星期四 = 受死day;
星期五 = 福来day;
星期六 = 洒脱day;
星期天 = 伤day

?

为了演示协变和逆变,以及之间的区别,请创建控制台程序CAStudy,手动添加两个类:

?

?

?

image

?

?

?

?

因为是演示,所以都是个空类,

?

?

?

只是有一点记住Dog 继承自Animal,

?

?

?

所以Dog变成Animal 就是和谐的变化(协变),而如果Animal 变成Dog就是不正常的变化(