Я пытаюсь создать простой класс THistory, который имеет одну процедуру, которая принимает абстрактный базовый класс, который реализует простой интерфейс.
Приведенный ниже код компилируется, но класс THistory вызывает базовый класс HistoryRecords абстрактной процедуры вставки вместо передаваемой в подклассы вставки процедуры.Чего мне не хватает?
Спасибо за помощь!
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;