这时候你应该推翻所有逻辑,重新设计,而不是一条路走到黑
你可以用switch,case来判断类型,但是如果以后不仅限于2个子类,而是有100个子类,这就完全不靠谱了
避免在一个对象里放入各种不同类型的变量
好比把int,string,float和double都扔进object里去,是很蛋疼的行为

解决方案 »

  1.   

    if (p is Child1){
        p.MethodOnlyInChild1();
    }else{
    // other condition...
    }
      

  2.   

    Child1 child = p as Child1;
    然后调用 child不就行了?
    另外不明白你说的显示代码指啥?
      

  3.   

    显式代码就是Child1 child = p as Child1;
    楼主想隐式调用,而不是显式转换,因为要显式转换就需要一大堆if,else来判断类型
      

  4.   

    Parent p ;
    if(p is Child1)
    {
    }
    else if (p is Child2)
    {
    }一般来说如果要确认子类是何种的,一般来说是需要在父类中有个属性可以区别的,但这样设计其实是不合理的,对于调用方来说,根本就不需要知道p究竟是c1还是c2,更不用对此做额外的处理,如果真必须那样,那我宁愿直接分两个方法返回相应的类,让方法能够简单明了,而不是让调用方再去做特殊处理
      

  5.   

    或者你一共就2个子类的话,其实定义2个全局变量,用之前判断一下哪个不为null就用哪个,也行.
    反正就是对付嘛,想对付办法还是挺多的
      

  6.   

    或者你一共就2个子类的话,其实定义2个全局变量,用之前判断一下哪个不为null就用哪个,也行.
    反正就是对付嘛,想对付办法还是挺多的
      

  7.   

    IOC  (Ninject  autofac Unity )  选一个你喜欢的
      

  8.   

    扩大转换,是不允许的
    你可以定义成object
      

  9.   

    要不把这个实例声明为 dynamic 的吧,这样就可以通过编译检查了,如果你确定他是 child1的话,就可以调用 child1 的成员。