【发布时间】:2011-10-28 10:35:17
【问题描述】:
我需要更改组件中的功能。当您收到“您无法覆盖此”消息,或者您需要更改私有方法中的代码(“基类中不存在该方法”消息)时,您会怎么做,导致组件无法下降?
【问题讨论】:
标签: delphi components vcl
我需要更改组件中的功能。当您收到“您无法覆盖此”消息,或者您需要更改私有方法中的代码(“基类中不存在该方法”消息)时,您会怎么做,导致组件无法下降?
【问题讨论】:
标签: delphi components vcl
如果我遇到这个问题,
永远不要忘记给单元和组件一个不同的名称(可能从原始组件或其祖先之一继承,因此它们保持在相同的层次结构中)。 切勿修改原始源代码,然后重新编译 VCL。这是维护的噩梦。
我不喜欢插入器类,即从原始类继承的与原始类具有相同名称但行为不同的类。它们的功能取决于包含在uses 子句中的顺序,这对我来说似乎不太可靠。我不建议这样做。
但我所做的很大程度上取决于问题。我认为不能(或不应该)给出涵盖所有情况的一揽子建议。
但我的主要建议是:不要修改原始单位,始终将新代码放在新单位 em> 并使用一个新的类名。这样,原始版本和修改后的版本可以和平共存,在 IDE 中也是如此。
【讨论】:
interface 部分进行任何更改,那么您就不需要重命名单元或其类。只需复制项目本地的单元,将副本添加到项目中,然后根据需要修改其implementation 部分。它将在编译期间覆盖 VCL 的本机代码。
Changing the unit and class names requires changing code that refers to them. 是的,确实如此,因为这表明您使用的是经过修改的组件。修改 VCL 中的原件是,IMO,一个坏主意,因为它使您的 VCL 与其他人的 VCL 不兼容,并且使您的代码成为维护的噩梦。任何错误都可能是由于您的修改或原始代码造成的。如果将它们分开,会发生什么就很清楚了。
【讨论】: