Delphi TCollectionItem的继承
我计划将项目集合存储在一个TCollection中 每个项目将派生自Delphi TCollectionItem的继承,delphi,inheritance,parameters,tcollectionitem,Delphi,Inheritance,Parameters,Tcollectionitem,我计划将项目集合存储在一个TCollection中 每个项目将派生自TBaseItem,后者又派生自TCollectionItem 记住这一点,当请求一个项目时,集合将返回TBaseItem 现在,每个TBaseItem将有一个Calculate函数,在TBaseItem中,这将只返回一个内部变量,但在TBaseItem的每个派生中,Calculate函数需要一组不同的参数 集合将有一个Calculate All函数,该函数遍历集合项并调用每个Calculate函数,显然它需要将正确的参数传递给
TBaseItem
,后者又派生自TCollectionItem
记住这一点,当请求一个项目时,集合将返回TBaseItem
现在,每个TBaseItem
将有一个Calculate
函数,在TBaseItem
中,这将只返回一个内部变量,但在TBaseItem
的每个派生中,Calculate
函数需要一组不同的参数
集合将有一个Calculate All
函数,该函数遍历集合项并调用每个Calculate
函数,显然它需要将正确的参数传递给每个函数
我可以想出三种方法:
处理此集合的最佳方法是什么?如果它们都有不同的方法签名,那么使用虚拟方法并不能真正获得任何东西-它们也可能是静态的。我会支持一组“通用”/“规范”的参数,如案例2中的参数,以及虚拟/重写的计算方法,至少根据您目前给出的描述。集合实际上不是设计用于多态性的。默认集合编辑器始终创建相同类型的项,即传递给集合构造函数的类型。如果不打算从表单设计器编辑集合的内容,则不要从TCollection开始。使用其他一些容器类,比如TObjectList,甚至是你自己的TObject的直接子类。问题更多的是将不同的参数从不同的子代传递给同一个方法。