协变和抗变的意思
发布网友
发布时间:2022-04-27 13:39
我来回答
共2个回答
热心网友
时间:2022-04-27 15:08
协变、抗变英文分别是 Covariance 、Contravariance ,形容词为 '-ce '==> '-t '
这是数学和物理学术语,在OO领域中也有应用。 “共变”、“逆变”是一种译法,另外一种译法是“协变”、“抗变”。特别在OO领域,基本上都是用后面这组。此外还有“不变(Nonvariance)”。
在OO中,协变是指按照继承链正向改变,抗变是指逆向改变。示例如下:
class Base
{
public:
virtual RB func(PB);
}
class Derived : public Base
{
public:
virtual RD func(PD);
}
此处Base::func 和 Derived::func 表示同一个虚函数。XB是Base中的返回值和形参;XD表示字(应该是子,转注)类中的。则协变表示XD继承XB(与Derived -- Base的关系相协);抗变表示XB继承XD(与Derived -- Base的关系相抗),不变当然是XD与XB相同.
目前,一般认为,返回值可以协变;参数则不可以(也有认为参数可以抗变)。
在C++标准的虚函数中,返回值协变,参数不变。即RD可以是RB的派生类,PD则一定与PB相同。在.NET 4之前,泛型接口是不变的。.NET 4通过协变和抗变为泛型接口和泛型委托添加了一个重要的扩展。
协变和抗变指对参数和返回值的类型进行转换。
在.NET中,参数类型是协变的。方法的返回类型是抗变的。
热心网友
时间:2022-04-27 16:26
yiyang