【发布时间】:2013-02-01 14:23:42
【问题描述】:
Delphi 2007,明年转移到 Delphi XE。
我们的产品广泛使用第三方组件。我们不直接使用组件,而是使用它的自定义后代,我们添加了很多额外的行为(自定义后代组件是几年前由已经退休的开发人员开发的)。
在第三方Parent类的源单元中,声明了一些枚举类型,控制组件的各种操作:
TSpecialKind = (skAlpha, skBeta, skGamma);
TSpecialKinds = set of TSpecialKind;
在我们的后代类中,我们想要添加新的行为,这需要扩展枚举类型的选择。本质上,我们想要这样:
TSpecialKind = (skAlpha, skBeta, skGamma, skDelta, skEpsilon);
TSpecialKinds = set of TSpecialKind;
显然,我们希望避免编辑第三方代码。简单地重新声明枚举类型,重复原始值并添加我们的新值,在我们自己的后代单元中是否有效?对现有代码有影响吗?
编辑: 示例场景(希望)澄清。假设您有一个(父)组件用于订购车辆零件。父单元有一个枚举类型 Tvkind 用于车辆种类,定义了值 vkCar 和 vkCycle。除其他外,这些值用于指示车辆有多少个轮子,4 个或 2 个。
现在,在您的后代组件中,您也希望能够处理三轮车辆。扩展 Tvkind 枚举类型以包含新值 vkTrike 似乎是显而易见的方法。但是如果您无权访问或不想修改父组件代码怎么办?
【问题讨论】:
-
你打算用这些新类型做什么。您不能在原始组件中使用它们。
-
@David 新类型只会在我们的后代组件中使用。有很多例程(在父类和子类中)需要 TSpecialKind 类型的值。在我们的组件中,我们想要添加建议扩展 TSpecialKind 值的功能。我将在帖子中添加一个示例场景。
-
所以假设你添加
vkTrike。您将什么值传递给原始组件?您唯一的选择是vkCar和vkCycle。我认为你提出的设计根本行不通。 -
我们从未真正使用过原始组件。我们只使用我们自己的后代。我的直觉是,这行不通,您和 Cosmin 的回答支持这一点。幸运的是,我确实有父源,所以我可能会接受简单地添加它的非最佳方法。我只需要记住每次我们获得更新的组件时都要重新修改。
-
您肯定使用的是原始组件。您创建了一个派生类。确保原始组件的代码将运行。
标签: delphi delphi-2007