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