一道笔试题求解

effun 2007-06-22 08:42:46
程序中有一个虚基类B,有许多由B派生的类D1~Dn。在B中有一个方法,其作用是创建一个当前对象的副本。那么,在外部代码调用D1~Dn的此方法时,应该如何创建具体派生类的实例?请综合考虑效率和可扩展性。

...全文
316 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
effun 2007-06-28
  • 打赏
  • 举报
回复
真的没人能理解吗?我还以为是我的资质太低了,庆幸一下。
dreamsnake 2007-06-22
  • 打赏
  • 举报
回复
因为我自认对这道题理解的基础和简单,我有点儿怀疑,是真的太基础简单了,还是自己的水平不够.

不过,还是说说我的理解,看看有没有高手帮我指正提高一下.呵呵.

我的答案: 首先,在虚方法定义上,肯定返回的是B类对象.所以,首先在子类中实现的些方法返回值也就是一个B类型的子类实例喽.所以,当然需要做一个向子类型的强制转换喽.

我能想到的方法好象也就只有这一种而已吧. 因为题里是问 "在外部代码调用D1~Dn的此方法时,应该如何创建具体派生类的实例?" . 我怎么想也只是觉得重点可能在于如何定义虚方法上吧.或者问问子类如何重写该方法. 现在问的是如何调用,不太明白考点和用意.
worms8888 2007-06-22
  • 打赏
  • 举报
回复
学习~
aSalt 2007-06-22
  • 打赏
  • 举报
回复
在外部代码调用D1~Dn的此方法时,应该如何创建具体派生类的实例?
--------------------------------------------------------------

直接 D1 d1=new D1(); 就成了,或者我没懂你的意思, 派生类继承了基类的方法 d1.方法();
effun 2007-06-22
  • 打赏
  • 举报
回复
我觉得,按题目的意思应该是做一个类似于Clone的方法。如果是这样的话,这个方法应该分成两个部分,一是创建一个新的实例,二是如何把当前对象的值Copy给新的对象。从题目的重点来看,主要就是第一部分,也就是如何创建一个新的实例。
因为B是一个虚类,因此不能实例化,那么要在B的Clone方法里直接创建一个当前类型的新实例就无从下手了,在我印象里C#是不能在基类直接调用当前派生类的构造函数的,除非已知类型。如果一定要使用这种方式,那就只有通过许多if来判断了,比如:
B newObj;
if (this.GetType() == typeof(D1))
newObj = new D1();
else if (this.GetType == typeof(D2))
newObj = new D2();
....
但这种方式就失去了可扩展性,并且在实际运用中也是不现实的。
还有一种办法就是通过反射来创建新实例,这样虽然保证了程序的可扩展性,但会使效率大打折扣。
想了很久,最终还是想到了两种办法来解决:
第一种办法是在B类中添加一个虚方法,在此方法中通过反射来创建新的实例。那么,为了解决效率的问题,派生类可重写这个虚方法,直接用new一个当前类型的实例即可。
第二种办法是把Clone方法改为泛型方法,并要求所提供的泛型类型必须为B的派生类并且具有默认的构造函数。
不知道我的思路对不对,希望大家一起来讨论一下。
LoveSunny_996 2007-06-22
  • 打赏
  • 举报
回复
B d = new D1();

d.方法()
笔试(erp系统管理员)题目 求解 偶乃一应届毕业生,上星期在网上见到一不错的公司招oracle数据库管理,于是屁颠屁颠跑到那公司,骗过门卫和保安,咨询了搞卫生的阿姨后,见到了人力资源部主管,话都没说上两句,给偶一道题目(erp系统管理员),结果没几个会做的。其实我自己也挺想往erp方向发展,所以打算下个星期再去。 请各位大虾们帮帮忙忙,提点提点。(我在论坛上查了些,资料,还是有好多不会的。) 1。列出 erp供应商及erp产品的名称,版本? (erp供应商是不是:racle erp在咱国内的用户比如,华菱、湘钢、衡钢、承 钢、济钢等等。名称和版本呢?) 2。名词解释 erp,crm,hr,oa,srm,pdm (我只查到了erp,crm,hr的解释,其他的查不到) 3。用一句话说明 bom,采购计划,生产订单,销售订单,物料清单 (查不到 ) 4。写sql语句。 ‘存货档案’(表一): 存货编码(c),存货名称(c),存货规格(c),存货类别(c) ‘发货单’(表二):存货编码(c),数量(n),单价(n) 用sql写出 A:存货类别为'办公用品',发货金额在1000元以下的所有发货单 B: 按存货名称汇总发货单的发货金额 (此题会做一点点,但是写得不全,还得请大家指导) 5 写出erp系统对'销售发货单',‘销售普通发票’生成的会计分录 (完全摸不着头脑)

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧