0

我打算收集存储在 TCollection 中的项目。

每个项目将派生TBaseItem自TCollectionItem,而这些项目又派生自TCollectionItem,

考虑到这一点,Collection 将TBaseItem在请求项目时返回。

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

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

我可以想到三种方法:

  1. 为基类中的每个计算函数创建一个虚拟/抽象方法并在派生类中覆盖它,这意味着使用对象时不需要类型转换,但这也意味着我必须创建大量虚拟方法并拥有一个大型 if...else 语句检测类型并调用正确的“计算”方法,这也意味着调用计算方法容易出错,因为您在编写代码时必须知道使用正确的参数以避免错误/EAbstractError。

  2. 创建一个包含所有可能参数的记录结构,并将其用作“计算”功能的参数。这具有将其传递给“计算所有”函数的额外好处,因为它可以包含所有所需的参数并避免可能很长的参数列表。

  3. 只需键入转换 TBaseItem 即可访问正确的计算方法。与第一种方法相比,这将整理 TBaseItem 很多。

处理这个集合的最佳方式是什么?

4

1 回答 1

1

如果它们都有不同的方法签名,那么你并没有真正通过使用虚拟方法获得任何东西——它们也可能是静态的。我会赞成在您的案例 2 中使用“通用”/“规范”参数集,以及虚拟/覆盖的计算方法,至少基于您迄今为止给出的描述。

于 2010-03-15T12:47:32.147 回答