首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TCollectionItem的遗传

TCollectionItem的遗传
EN

Stack Overflow用户
提问于 2010-03-15 12:18:28
回答 1查看 480关注 0票数 0

我计划将项目集合存储在TCollection中。

每个项目都将从TBaseItem派生,而后者又派生于TCollectionItem,

考虑到这一点,当请求项时,集合将返回TBaseItem

现在每个TBaseItem都有一个Calculate函数,在TBaseItem中这只会返回一个内部变量,但是在TBaseItem的每个派生项中,Calculate函数需要一组不同的参数。

集合将有一个Calculate All函数,它遍历集合项并调用每个Calculate函数,显然它需要将正确的参数传递给每个函数

我可以想出三种方法:

  1. 为基类中的每个计算函数创建一个虚拟/抽象方法,并在已删除的类中重写它,这意味着在使用该对象时不需要进行类型转换,但也意味着我必须创建大量的虚拟方法,并有一个大型if...else语句检测该类型并调用正确的“计算”方法,这还意味着调用计算方法很容易出错,因为在编写代码时,您必须知道要用正确的参数调用哪种类型的代码,以避免Error/EAbstractError.
  2. Create中包含所有可能参数的记录结构,并将其用作“计算”函数的参数。这样做的另一个好处是将其传递给“计算所有”函数,因为它可以包含所需的所有参数,并避免可能非常长的参数列表。
  3. 只需键入TBaseItem以访问正确的计算方法。与第一种方法相比,这将极大地改善TBaseItem。

处理这个收藏的最好方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-03-15 12:47:32

如果它们都有不同的方法签名,那么通过拥有虚拟方法就不会真正获得任何东西--它们可能也是静态的。我会支持“泛型”/“规范”参数集,就像在您的案例2中一样,以及虚拟/重写的计算方法,至少基于您到目前为止已经给出的描述。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2446959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档