C#Upcasting / Polymorphism问题

时间:2015-03-15 17:11:45

标签: c# polymorphism downcast upcasting

我相信这个问题相当基本,但我无法找到这个问题的答案。在C#中,我们说我有3个班级:A, B, C

B来自A

C来自B

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

A[] myArrayofAtypes;

但是,让我说我创建了这个类型为C的数组的第一个元素。如果类型C在其类定义中定义了一个变量,它只存在于C类的类定义中......怎么做我从数组中访问该变量?我不能只做A[0].MyVariableGetter,因为基类A中没有该变量。

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

你必须向下倾斜

C c = (C)myArrayofAtypes[0];
var v = c.MyVariableGetter;

答案 1 :(得分:0)

您必须输入强制转换类型c并访问该成员。

If (arr[i] is c)
{
    ((C)arr[0]).member = value;
 }

答案 2 :(得分:0)

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

public void CallIfTypeC(A a)
{
    if (a is C)
    {
        C c = a as C;
        c.DoAction();
    }
}