列表中的c#继承
我正在尝试构建一个XML解释器,并且有很多继承在进行。当我有一个列表,并且我想访问特定类型的抽象时,有没有一种简单的方法可以做到这一点?这就是我目前正在做的:列表中的c#继承,c#,xml,list,inheritance,C#,Xml,List,Inheritance,我正在尝试构建一个XML解释器,并且有很多继承在进行。当我有一个列表,并且我想访问特定类型的抽象时,有没有一种简单的方法可以做到这一点?这就是我目前正在做的: abstract class Foo{} class iFoo : Foo { int bar; } class xFoo : Foo { string bar; } class Main { List<Foo> fooList; public static void Main (string[]ar
abstract class Foo{}
class iFoo : Foo
{
int bar;
}
class xFoo : Foo
{
string bar;
}
class Main
{
List<Foo> fooList;
public static void Main (string[]args)
{
iFoo iBar = fooList[0] as IFoo;
xFoo xBar = fooList[1] as XFoo;
iBar.bar = 10;
xBar.bar = "hello world";
}
}
您可以像这样使用关键字:
fooList[0](as type iFoo).bar = 10;
(fooList[0] as IFoo).bar = 10;
dynamic instance = fooList[0];
instance.bar = value;
及
如果知道实例上有哪些属性或方法,可以强制转换为
动态
,这样编译器就不会干扰它
它看起来是这样的:
fooList[0](as type iFoo).bar = 10;
(fooList[0] as IFoo).bar = 10;
dynamic instance = fooList[0];
instance.bar = value;
value
是要分配的值的占位符。但是请记住,操作必须是有效的。不能仅仅因为强制转换到
动态没有类型iBar
,就将字符串
分配给int
。你是说(愚人[0]作为IFoo)。bar=10代码>?任何访问子属性的操作都不会是类型安全的,除非您有验证基础类型的代码。如果愚人[0]
是一个XFoo
而不是IFoo
,该怎么办?如果您提前知道结构,也许您应该查看不同于Foo
s列表的结构。在使用as
时,确实应该检查null
,以防止null引用异常。