[英]C# OOPS clarification
请为什么行“ b [0] = new Child2();” 在运行时而不是在编译时失败。 请不要检查语法,我只是在这里做
class Base
{}
class Child1 : Base
{}
class Child2 : Base
{}
class Test
{
void Main()
{
Base [] b= new Child1[10];
b[0]= new Child2(); <-- Fails at runtime but not at compile time WHY?
}
}
new Child1[10];
您刚刚声明了一个类型为Child1
的新数组。
b[0]= new Child2();
现在,您正在尝试将同级类放入其中。 对象数组可以存储该对象及其子类,但不能存储其同级对象。
Ilya Ivanov是正确的:可以将Child1对象的数组强制转换为基础对象的数组。 但是您不能为此添加Child2,因为这是一个不同的类。
数组协方差意味着,如果两个类具有子类-超类关系,则它们的数组也具有此关系。
您将b定义为child1的数组,然后尝试插入child2。
但是,编译器无法为您分配给b,因为两行之间可能会发生任何事情。 但是,在运行时可以确定。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.