[问题] 父类别转子类别

楼主: grace0523 (小小)   2015-11-23 23:31:02
Class father
{}
Class child : father
{}
father f = new child();
Child C1 = (child)f ;//第一种强转
child C2 = f as child ;//第二种强转
除了上述两种强转外
还有什么方式可以转成子类别呢
有没有动态的方式能转呢
例如有多种子类别实体
放在父类别的List变量里
要怎么依序的将该List转成子类别呢
作者: TameFoxx (foxx)   2015-11-23 23:34:00
Foreach(child _child in FatherList)你要的是这个吗还是你想把一个有猫有老虎有狮子的List分类出来
楼主: grace0523 (小小)   2015-11-23 23:40:00
对 那个list有很多不同的子类别 要如转回到子类别呢
作者: bantime (景)   2015-11-23 23:52:00
你想转回来做什么? 设计上应该不会用到这件事情才对..附注 第二种转型方式印像中效能会比较好
作者: Litfal (Litfal)   2015-11-23 23:57:00
如果确定转换一定成功,第一种效能比较好然后需要这样转的话,通常设计有问题...
作者: bantime (景)   2015-11-24 00:07:00
因为第一种方式就是少了检查直接转型 不确定状况下as 会比较安全y
作者: soup514   2015-11-24 00:33:00
还是要看转回来做什么? 不然实作interface就好啦
作者: pauliaia   2015-11-24 01:36:00
个人觉得有共通方法就用interface没有就switch + typeofhttp://stackoverflow.com/questions/1711005 下下方解
楼主: grace0523 (小小)   2015-11-24 07:48:00
转回来的原因是要用子类别内宣告的变量在父类别那边看不到子类别自己的东西
作者: bantime (景)   2015-11-24 08:47:00
如果变量型别一样 可以写个interface 抓出来或者写个function return 出来
作者: iterator (rotareti)   2015-11-24 16:18:00
as 效能比较好, http://tinyurl.com/clr68dj是共通的功能, 应该要透过 virtual method 提供如果要从单独抽出某个子类别的 object,可以透过 List<P>.OfType<C>()
作者: Litfal (Litfal)   2015-11-26 03:58:00
连结那篇说的有问题,有空再来聊,你要不要自己测测先?

Links booklink

Contact Us: admin [ a t ] ucptt.com