if(thePlantObj is Flower)
{
Flower flw=thePlantObj as Flower;
flw.Color="red";
}
if(thePlantObj is IEverGreenAble)
{
IEverGreenAble ega=thePlantObj as IEverGreenAble;
///...
}
{
Flower flw=thePlantObj as Flower;
flw.Color="red";
}
if(thePlantObj is IEverGreenAble)
{
IEverGreenAble ega=thePlantObj as IEverGreenAble;
///...
}
如果传入的是Flower,那Plant会自动把它变为Flower。它是怎么实现这点的呢?
至于dotNet是怎样实现的,你可以搜索RTTI最常见的例子是容器。ArrayList GetPlants()
{
ArrayList al=new ArrayList();
al.Add(new Plant());
al.Add(new Flower());
return al;
}Somefunc()
{
ArrayList al=GetPlants();
foreach(object obj in al)
{
//assert(obj is Plant)
if(obj is Flower)
{
Flower f=(Flower)obj;
}
else if(obj is Glass)
{
//...do as Glass can do
}
else
{
//do as Unknown Plant can do
}
}
}
{
.....
}
可以判断plant是不是Flower类型。