Sea*_*ean 3 delphi interface abstract
我正在尝试创建一个简单的类THistory,它有一个过程,它接受一个实现简单接口的抽象基类.
下面的代码编译,但是THistory类调用基类HistoryRecords抽象Insert proc而不是传入的子类Insert proc.我错过了什么?
谢谢你的帮助!
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;
Run Code Online (Sandbox Code Playgroud)
你错过了覆盖:
TAlarmHistoryRecord = class(THistoryRecord)
procedure Insert(); override;
end;
Run Code Online (Sandbox Code Playgroud)
你override在TAlarmHistoryRecord方法声明中缺少指令,即它应该是
procedure Insert(); override;
Run Code Online (Sandbox Code Playgroud)
实际上编译器应警告您该方法隐藏了继承的方法.
| 归档时间: |
|
| 查看次数: |
200 次 |
| 最近记录: |