作者grace0523 (小小)
看板C_Sharp
标题[问题] 父类别转子类别
时间Mon Nov 23 23:31:02 2015
Class father
{}
Class child : father
{}
father f = new child();
Child C1 = (child)f ;//第一种强转
child C2 = f as child ;//第二种强转
除了上述两种强转外
还有什麽方式可以转成子类别呢
有没有动态的方式能转呢
例如有多种子类别实体
放在父类别的List变数里
要怎麽依序的将该List转成子类别呢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.136.154.63
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1448292664.A.149.html
1F:推 TameFoxx: Foreach(child _child in FatherList) 11/23 23:34
2F:→ TameFoxx: 你要的是这个吗 11/23 23:34
3F:推 TameFoxx: 还是你想把一个有猫有老虎有狮子的List分类出来 11/23 23:36
4F:→ grace0523: 对 那个list有很多不同的子类别 要如转回到子类别呢 11/23 23:40
5F:→ bantime: 你想转回来做什麽? 设计上应该不会用到这件事情才对.. 11/23 23:52
6F:→ bantime: 附注 第二种转型方式印像中效能会比较好 11/23 23:53
7F:→ Litfal: 如果确定转换一定成功,第一种效能比较好 11/23 23:57
8F:→ Litfal: 然後需要这样转的话,通常设计有问题... 11/23 23:57
9F:→ bantime: 因为第一种方式就是少了检查直接转型 不确定状况下 11/24 00:07
10F:→ bantime: as 会比较安全y 11/24 00:07
11F:→ soup514: 还是要看转回来做什麽? 不然实作interface就好啦 11/24 00:33
12F:→ pauliaia: 个人觉得有共通方法就用interface没有就switch + typeof 11/24 01:36
14F:→ grace0523: 转回来的原因是要用子类别内宣告的变数 11/24 07:48
15F:→ grace0523: 在父类别那边看不到子类别自己的东西 11/24 07:49
16F:→ bantime: 如果变数型别一样 可以写个interface 抓出来 11/24 08:47
17F:→ bantime: 或者写个function return 出来 11/24 08:48
19F:→ iterator: 是共通的功能, 应该要透过 virtual method 提供 11/24 16:21
20F:→ iterator: 如果要从单独抽出某个子类别的 object, 11/24 16:27
21F:→ iterator: 可以透过 List<P>.OfType<C>() 11/24 16:28
22F:→ Litfal: 连结那篇说的有问题,有空再来聊,你要不要自己测测先? 11/26 03:58