繁体   English   中英

C#OOPS澄清

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM