0

我相信这个问题是相当基本的,但我很难找到这个问题的答案。在 C# 中,假设我有 3 个类:A, B, C

B 派生自 A

C 派生自 B

现在,如果我想要一个 A 类对象的列表或数组,但希望该数组能够容纳 B 和 C 类型的对象,这没问题……我可以这样做:

A[] myArrayofAtypes;

但是,假设我创建了这个 C 类型数组的第一个元素。如果 C 类型在其类定义中定义了一个仅存在于 C 类的类定义中的变量……我如何从数组中访问该变量?我不能这样做A[0].MyVariableGetter,因为基类 A 中不存在该变量。

有什么建议么?

4

3 回答 3

1

你必须沮丧

C c = (C)myArrayofAtypes[0];
var v = c.MyVariableGetter;
于 2015-03-15T17:14:57.883 回答
0

您必须将其类型转换为类型 c 并访问该成员。

If (arr[i] is c)
{
    ((C)arr[0]).member = value;
 }
于 2015-03-15T17:16:50.233 回答
0

而不是像这样建议的'king.code',我会使用这些漂亮的C#运算符,它们是'is'和'as'。

public void CallIfTypeC(A a)
{
    if (a is C)
    {
        C c = a as C;
        c.DoAction();
    }
}
于 2015-03-15T17:18:08.467 回答