面向对象之 协变逆变

协变

就是协着变,跟着变,我跟你变,你怎么变我怎么变。

逆变

就是逆着变,反着变,你变我也变,但我跟你变的相反 

 

从中看到有几个要素

跟着变

 

来个数学例子

y=x

在坐标系上是一条东北到西南的直线

你是x

我是y

x变大

y跟着变大

所以y对于x是协变的

y其实是x的一种函数关系

y随着x变大是因为要维持这种函数关系

 

来个物理例子

矢量

矢量由坐标分量和坐标上的基的乘积来表示

基就比如数量单位,方向单位

分量表示以基为单位的长度,有多少个基

这里的几个元素是: 矢量,坐标系,坐标分量,基

这几个元素的关系是怎么样的呢

坐标系变化了,其实也就是基变换了,不论是方向还是单位

对于同一个矢量来说

参考的坐标系的基变化了,分量肯定要变化,而且是逆变的,才能保证此矢量不变,不管基于何种坐标系

所以

对于坐标系而言

基是协变的基

分量是逆变的分量

矢量在这里的作用

就像上面例子里面的函数关系

它在这里就是一个标杆

不管你们怎么变

必须确保我是不变的

 

是因为不变

维持函数关系不变,不管x怎么变大,总有协变的y来维持关系维持规律

维持物体本身不变,不管参考系如何变化,因为有逆变分量的中和

 

顺着变的是协变

为了阻止变,扭转变从而达到不变的,是逆变

 

现在开始看协变逆变在程序里怎么体现

也就是一个实体的类型变了

然后带来的协变和逆变

 

实体的类型变换就是子类父类的相互转换

比如里氏变换

在任何场景下

子类型可以安全的转换成父类型

 

//TODO: 

1,引用二中的引入与总结

2,引用三中的引入与总结

3,引用四中的引入与总结

4,里氏变换?

 

 

【暑假科普VII】协变性,协变与逆变

.NET 4.0中的泛型协变和反变

 

一句话清晰总结协变和逆变

10分钟了解C#中的协变和逆变

 

 

posted on 2014-05-28 04:06  tirestay  阅读(355)  评论(0编辑  收藏  举报

导航