[英]C# Upcasting / Polymorphism Issue
我相信這個問題是很基本的,但是我很難找到這個問題的答案。 在C#中,假設我有3個類別: A, B, C
B衍生自A
C源自B
現在,如果我想要一個類類型為A的對象的列表或數組,但希望該數組能夠容納類型為B和C的對象,這是沒有問題的……我可以這樣做:
A[] myArrayofAtypes;
但是,假設我是該類型C的數組的第一個元素。如果類型C在其類定義中定義了一個變量,則該變量僅存在於類C的類定義中……如何從數組訪問該變量? 我不能只做A[0].MyVariableGetter
因為該變量在基類A中不存在。
有什么建議么?
你必須垂頭喪氣它:
C c = (C)myArrayofAtypes[0];
var v = c.MyVariableGetter;
您必須鍵入強制類型轉換才能鍵入c並訪問該成員。
If (arr[i] is c)
{
((C)arr[0]).member = value;
}
我不會使用像這樣的“ king.code”強制轉換,而是使用這些漂亮的C#運算符“ is”和“ as”。
public void CallIfTypeC(A a)
{
if (a is C)
{
C c = a as C;
c.DoAction();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.