我浏览了类似的线程,它们都与C ++有关,所以我认为最好不要只是摸索。例如,我有这段代码:
foo[] fooArray = new foo[5];
fooArray[2] = new bar();
假设foo
是一个没有变量/方法的自定义类:
public class foo
{
}
bar
是从foo
派生的自定义类:
public class bar : foo
{
int fooBar = 0;
}
在我的fooArray
中,我需要从fooBar
访问变量fooArray[2]
,这是bar
,但因为变量没有出现在基类中,它不会显示在foo
的数组中。有什么方法可以访问它吗?
编辑:在应用程序代码中,foo和bar都具有所需的构造函数和其他设置。
答案 0 :(得分:1)
你可以投。为了安全起见,您应该使用as
关键字:
bar b = fooArray[2] as bar
if ( b != null ){
//Do stuff with b.foobar
} else {
//Handle the case where it wasn't actually a bar
}
答案 1 :(得分:0)
由于foo
类没有fooBar
字段。除非将变量转换为Bar
,否则无法访问它:
fooArray[2] = new bar();
var value = ((bar)fooArray[2]).fooBar;
注意:fooBar
字段应为公开 .Fields默认为私有。
答案 2 :(得分:0)
您可以将数组中的一个项目投射到bar
并以此方式访问,
bar barVar = (bar)fooArray[2];
int fooBarInt = barVar.fooBar;
或使用as
运算符将对象视为类型bar
,
bar barVar = fooArray[2] as bar;
if (barVar != null)
{
// user barVar.fooBar;
}
但是,在示例fooBar
中定义它的方式是private
。你必须让它public
在课堂外访问它。
public class bar : foo
{
public int fooBar = 0;
}
答案 3 :(得分:0)
要访问它,您需要将值转换为bar
实例
int i = ((bar)fooArray[2]).foobar;
请注意,如果fooArray[2]
实际上不是bar
的实例,则此代码将引发异常。如果您只想在fooArray[2]
为bar
时执行此操作,请执行以下操作
bar b = fooArray[2] as bar;
if (b != null) {
int i = b.foobar;
...
}