2011-12-13 72 views

回答

1

如果您有混合列表並且想要訪問爲派生類型定義的成員,則必須轉換爲派生類型。

((Circle)list[index]).Radius = 10; // alternately use is or as if you're unsure 

當然,由憑藉簡單的混合列表,你說,你通常不關心派生類型之間的差異,你的內容與使用基本多態。如果你發現自己處於不同的位置,你應該重新思考你的存儲或消費這些元素的策略。

+0

這會在該索引的情況下發生崩潰,這是一個矩形... –

+0

當然會。我要在'as'或'is'變體中編輯,但由於其他人已經覆蓋並且話題被關閉了...... –

0

類型轉換它:

((Circle)list[X]).Radius 
+0

這會在該索引處有一個Rectangle時崩潰... –

7

你將不得不在運行時檢測動態元素的類型。

IShape value = list[x]; 
if(value is Circle) 
{ 
    ((Circle)value).radius = 5; 
} 

你也可以這樣做:

Circle value = list[x] as Circle; 
if(value != null) 
{ 
    value.radius = 5; 
} 

這具有快一點,因爲劇組只進行一次的優勢。