簡體   English   中英

C#上載/多態問題

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM