if(thePlantObj is Flower)
{
   Flower flw=thePlantObj as Flower;
   flw.Color="red";
}
if(thePlantObj is IEverGreenAble)
{
   IEverGreenAble ega=thePlantObj as IEverGreenAble;
   ///...
}

解决方案 »

  1.   

    你的意思是客户端程序能自动判断其类型?
    如果传入的是Flower,那Plant会自动把它变为Flower。它是怎么实现这点的呢?
      

  2.   

    你都说是Create的客户知道具体类型,当然是客户自己来判断啦。
    至于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
    }
    }
    }
      

  3.   

    一些必要的判断肯定会要有的。我奇怪的是它怎么知道是什么类型的呢?就是说plant is Flower是怎么工作的?
      

  4.   

    if(plant is Flower)]
    {
       .....
    }
    可以判断plant是不是Flower类型。
      

  5.   

    TIJ里有介绍说什么溯造型的,是不是就是通过那种方式知晓的啊?
      

  6.   

    看看msdn中的"运算符的重载"这一章,应该会对你有帮助的!!!
      

  7.   

    是vs.net的帮助文档里吗?没发现啊。