簡體   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