普通对象基类型 - 派生类型转换是否属于协方差和逆变?

时间:2014-08-01 06:20:57

标签: c# .net covariance contravariance

协方差和逆变为Arrays,Delegates和Generic参数类型提供隐式引用转换。

IEnumerable<string> strings = new List<string>();
IEnumerable<object> objects = strings;

Action<object> actObject = SetObject;
Action<string> actString = actObject;

正常的对象基类型派生类型转换是否属于协方差和逆变,如下所述?

ChildClass childobj=new ChildClass;
BaseClass baseobj=childobj;

BaseClass baseobj=new BaseClass;
ChildClass childobj= (BaseClass) baseobj;

如果是这样,运行时如何处理它,如果不是为什么?

1 个答案:

答案 0 :(得分:0)

协方差和逆变量仅适用于参数多态,例如。当一种类型具有其他类型作为参数时。这是因为一些用例可能会编译,即使它们没有正确输入。例如like this

你的第二个例子就是简单的数据多态,不需要应用协方差和逆变,因为这些用例不适用。