我正在尝试创建一个简单的类 THistory,它有一个过程,该过程采用一个实现简单接口(interface)的抽象基类。
下面的代码可以编译,但是 THistory 类调用基类 HistoryRecords 抽象 Insert 过程,而不是传入的子类 Insert 过程。我错过了什么?
感谢您的帮助!
unit uHistory;
interface
uses Dialogs;
type
IHistoryRecord = interface
['{67C90064-1667-4DE0-AF52-11B6E5A00892}']
procedure Insert();
end;
THistoryRecord = class abstract(TInterfacedObject, IHistoryRecord)
procedure Insert(); virtual; abstract;
end;
THistory = class(TObject)
public
procedure Add(pHistoryRecord : THistoryRecord);
end;
TAlarmHistoryRecord = class(THistoryRecord)
procedure Insert();
end;
implementation
{ THistory }
procedure THistory.Add(pHistoryRecord: THistoryRecord);
begin
pHistoryRecord.Insert();
end;
{ TAlarmHistoryRecord }
procedure TAlarmHistoryRecord.Insert;
begin
MessageDlg('Alarm History Record - Insert Method', mtInformation, [mbOK], 0);
end;
end.
Usage
procedure TForm1.Button1Click(Sender: TObject);
var
lHistory : THistory;
lHistoryRecord : TAlarmHistoryRecord;
begin
lHistory := THistory.Create();
lHistoryRecord := TAlarmHistoryRecord.Create();
// I want this to call the TAlarmsHistoryRecord.Insert proc not the
// HistoryRecord base class Insert proc.
lHistory.Add(lHistoryRecord);
end;
最佳答案
您错过了覆盖:
TAlarmHistoryRecord = class(THistoryRecord)
procedure Insert(); override;
end;
关于delphi - 为什么不调用抽象基类方法的后代版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8522358/