关于c#:普通对象基类型 – 派生类型转换是否属于协方差和逆变?

Does normal object base type - derived type conversion come under Covariance and contravariance?

协方差和逆变为数组、委托和泛型参数类型提供隐式引用转换。

1
2
3
4
5
IEnumerable<string> strings = new List<string>();
IEnumerable<object> objects = strings;

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

正常的对象基类型派生类型转换是否符合下面所述的协方差和反方差?

1
2
3
4
5
ChildClass childobj=new ChildClass;
BaseClass baseobj=childobj;

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

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


协方差和反方差只适用于参数多态性,例如当一个类型有另一个类型作为参数时。这是因为有些用例甚至可能编译得很糟糕,它们的类型不健全。例如这样。

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