我有以下虚拟程序:
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;
这不起作用。我该如何解决这个问题?或者这不可能吗?
此致 丹尼斯
答案 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
父类的原始方法。在这种情况下,可以从后代类访问这两种方法。