我相信这个问题相当基本,但我无法找到这个问题的答案。在C#中,我们说我有3个班级:A, B, C
B来自A
C来自B
现在,如果我想要类A类型的对象列表或数组,但希望数组能够容纳B和C类型的对象,这没问题......我可以这样做:
A[] myArrayofAtypes;
但是,让我说我创建了这个类型为C的数组的第一个元素。如果类型C在其类定义中定义了一个变量,它只存在于C类的类定义中......怎么做我从数组中访问该变量?我不能只做A[0].MyVariableGetter
,因为基类A中没有该变量。
有什么建议吗?
答案 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();
}
}