当前位置: 代码迷 >> C# >> 父类定义,动态实例化成子类,遇到的若干有关问题
  详细解决方案

父类定义,动态实例化成子类,遇到的若干有关问题

热度:51   发布时间:2016-05-05 04:59:51.0
父类定义,动态实例化成子类,遇到的若干问题
我以Parent类(它有2个子类Child1 ,Child2)定义了一个对象p   Parent p,但是没有实例化

实例化是在运行的过程中判断 然后动态实例化的,我也不知道它实例化成了Child1还是Child2

那么问题来了,再后期假如我想调用Child1里的方法(父类没有定义此方法),我直接强制转换来调用是不行的,因为虽然我知道它实例化成了Child1,但没有显式代码,所以它还是默认成不知道它实例化成了哪个类对象。

逻辑有点绕,希望能理解的大神给个指点,这个时候怎么办?
------解决思路----------------------
这时候你应该推翻所有逻辑,重新设计,而不是一条路走到黑
你可以用switch,case来判断类型,但是如果以后不仅限于2个子类,而是有100个子类,这就完全不靠谱了
避免在一个对象里放入各种不同类型的变量
好比把int,string,float和double都扔进object里去,是很蛋疼的行为
------解决思路----------------------
if (p is Child1){
    p.MethodOnlyInChild1();
}else{
// other condition...
}
------解决思路----------------------
Child1 child = p as Child1;
然后调用 child不就行了?
另外不明白你说的显示代码指啥?
------解决思路----------------------
引用:
Child1 child = p as Child1;
然后调用 child不就行了?
另外不明白你说的显示代码指啥?

显式代码就是Child1 child = p as Child1;
楼主想隐式调用,而不是显式转换,因为要显式转换就需要一大堆if,else来判断类型
------解决思路----------------------
或者你一共就2个子类的话,其实定义2个全局变量,用之前判断一下哪个不为null就用哪个,也行.
反正就是对付嘛,想对付办法还是挺多的
------解决思路----------------------
IOC  (Ninject  autofac Unity )  选一个你喜欢的
------解决思路----------------------
引用:
这就好比你在搬家的时候,把家具,书,食品,垃圾,都打包到一模一样的箱子里去,等搬完了,你不挨个打开看,是没法知道里面有什么的
重新设计你的结构来存放对应的数据类型


顶!
------解决思路----------------------
要不把这个实例声明为 dynamic 的吧,这样就可以通过编译检查了,如果你确定他是 child1的话,就可以调用 child1 的成员。
  相关解决方案