c# List装载对象可否混装子类和父类对象

.Net技术 码拜 6年前 (2015-03-22) 416次浏览 0个评论
 

比如 有个父类 Parent和其子类Child,其中分别有两个实例对象,p和c
如果定义一个List<Parent> 对象list,那么可以这样list.Add(p),然后list.Add(c)么?
有什么要注意的?遇到需要这样使用,大家一般如何处理?
大神不要鄙视我懒,自己查阅资料和测试,是一种能力,但听听过来者的声音也好。

 
c# List装载对象可否混装子类和父类对象
5分
能的。。。
一个水果的list,既可以add苹果,又可以add香蕉
c# List装载对象可否混装子类和父类对象
5分
一般都会避免这样使用
就好像你要把int,float和string都放到List<object>里去一样,能放进去吗?肯定是能放进去的
问题是你如何取出来?写一大堆switch,case判断类型吗
c# List装载对象可否混装子类和父类对象
5分
可以。声明父类 就是说了个继承的特性,将拥有相同特性的对象封装为同一类对象。
c# List装载对象可否混装子类和父类对象
既然可以,确实问题就是怎么取出来了,如果直接list.elementat<> 取出来的对象(假设正好是子类)可否调用子类属性方法呢?
c# List装载对象可否混装子类和父类对象
5分
可以的。注意事项就是,所以用到这里list的地方,使用里面的元素的时候,只用父类的方法。
也就是说,不让让调用这个list的地方知道里面还有子类的对象,一律当做父类对象来看到。别出现判断类型的分支代码。
c# List装载对象可否混装子类和父类对象
经过测试,
如果list add子类对象,那么list取出来的对象是可以强制转换成子类然后调用子类属性和方法;
如果list add父类对象,则不行。
c# List装载对象可否混装子类和父类对象
10分
引用 6 楼 u010412702 的回复:

经过测试,
如果list add子类对象,那么list取出来的对象是可以强制转换成子类然后调用子类属性和方法;
如果list add父类对象,则不行。

本来就是这样啊.
就像我上面举例,把int和object都放到object里去,int可以重新转成int,object能转int吗?


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明c# List装载对象可否混装子类和父类对象
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!