Delphi:重新引入并重载虚拟过程

时间:2016-01-05 13:38:56

标签: delphi inheritance

我有以下虚拟程序:

procedure WorkflowInstanceInsert(WorkIns: TWorkflowInstance; AWorkflowStudio: TCustomWorkflowStudio); virtual;

在继承的课程中,我定义了以下程序:

  procedure WorkflowInstanceInsert(const AWorkflowInstance: TWorkflowInstance;
  const AWorkflowStudio: TCustomWorkflowStudio; const AClientID: Integer;
  const AAttributeDataStructureID: Integer); reintroduce;

  procedure WorkflowInstanceInsert(WorkIns: TWorkflowInstance;
  AWorkflowStudio: TCustomWorkflowStudio); override; overload;

这不起作用。我该如何解决这个问题?或者这不可能吗?

此致 丹尼斯

1 个答案:

答案 0 :(得分:4)

您需要将所有降序方法声明为重载:

  TMyClass = class
    procedure WorkflowInstanceInsert(WorkIns: TWorkflowInstance;
      AWorkflowStudio: TCustomWorkflowStudio); virtual;
  end;

  TMyClass2 = class(TMyClass)
    procedure WorkflowInstanceInsert(const AWorkflowInstance: TWorkflowInstance;
      const AWorkflowStudio: TCustomWorkflowStudio; const AClientID: Integer;
      const AAttributeDataStructureID: Integer); reintroduce; overload;
    procedure WorkflowInstanceInsert(WorkIns: TWorkflowInstance;
      AWorkflowStudio: TCustomWorkflowStudio); overload; override;
  end;

<强>所附

根据@SilverWarior的重要评论,我添加以下注释。 Embarcadero Help System给出了一个示例,其中父类的虚方法也被标记为overload。当需要使用不同的参数(overload)向后代类添加新方法时,可以这样做,但同时你没有override父类的原始方法。在这种情况下,可以从后代类访问这两种方法。

相关问题