我打算收集存储在 TCollection 中的项目。
每个项目将派生TBaseItem
自TCollectionItem,而这些项目又派生自TCollectionItem,
考虑到这一点,Collection 将TBaseItem
在请求项目时返回。
现在每个TBaseItem
都会有一个Calculate
函数,在TBaseItem
this 中只会返回一个内部变量,但在每个函数的派生中都TBaseItem
需要Calculate
一组不同的参数。
Collection 将有一个Calculate All
函数遍历集合项并调用每个Calculate
函数,显然它需要将正确的参数传递给每个函数
我可以想到三种方法:
为基类中的每个计算函数创建一个虚拟/抽象方法并在派生类中覆盖它,这意味着使用对象时不需要类型转换,但这也意味着我必须创建大量虚拟方法并拥有一个大型 if...else 语句检测类型并调用正确的“计算”方法,这也意味着调用计算方法容易出错,因为您在编写代码时必须知道使用正确的参数以避免错误/EAbstractError。
创建一个包含所有可能参数的记录结构,并将其用作“计算”功能的参数。这具有将其传递给“计算所有”函数的额外好处,因为它可以包含所有所需的参数并避免可能很长的参数列表。
只需键入转换 TBaseItem 即可访问正确的计算方法。与第一种方法相比,这将整理 TBaseItem 很多。
处理这个集合的最佳方式是什么?