如何在Delphi中影响修改后的父类的后代?

时间:2014-02-25 15:22:31

标签: delphi inheritance delphi-7

假设我在Unit1中有两个课程:TParent = class(TCustomControl)TDescendant = class(TParent),他们都有很多方法,字段和属性。

Unit2我需要修改TParent。假设我只需要以一种非常简单的方式修改单个方法Method1,这种方法实际上不会影响其他任何东西(例如,打印红色而不是黑色的文本)。我还需要TDescendant受此修改影响(因此每次调用Method1时都会执行修改后的Method1

有没有办法在 Delphi 7 中执行此操作而不修改Unit1并且不将整个TDescendant类复制到Unit2

最重要的是,我真的需要类名保持不变(我只是尝试修改第三方控件中的方法而不创建一个全新的控件来执行此操作)。

我在TParent中创建了Unit2的拦截器类,但我不知道(如果可能的话)“告诉”TDescendant成为拦截器的后代而不是原来的。

1 个答案:

答案 0 :(得分:0)

据我所知,如果没有一些严重的低级别黑客(基于指针/内存),这是不可能的。因此我根本不会建议...(我也不知道该解决方案的实际答案)。

当你只想在TParent类中添加一些额外的方法时,可以使用辅助类(Delphi XE + - 甚至可能是早期版本)。

实施例

TParentHelper = class helper for TParent
public
  procedure MyMethod(param: string);
end;

现在你可以尝试这样的东西:

uses
  MyParentHelperU;

Procedure test(D: TDescendant);
begin
  D.MyMethod('test');
end;

注意:

  1. 您需要包含已定义帮助程序类的单元,以便使用此功能。
  2. 您只能向已为其分配了辅助类的类(和后代)添加方法。您无法添加属性或字段。
  3. 可以通过helperclass访问受保护的属性,但IDE并不总是显示它