【发布时间】:2017-10-22 17:44:38
【问题描述】:
我希望继承一些 D 类的遗产,并实现接口 A、B 和 C 的所有属性和方法。请帮我提供 Delphi 中的示例。
我使用德尔福 Xe7 一个类如何实现多个接口? 我正在尝试类似:
Unit1
Type
IRefresher = Interface
['{B289720C-FFA4-4652-9F16-0826550DFCF9}']
procedure Refresh;
function getRefreshed: boolean;
property Refreshed:Boolean read getRefreshed;
End;
Unit2
Type
IRecorder = Interface
['{AB447097-C654-471A-A06A-C65CE5606721}']
procedure Reader;
procedure Writer;
end;
Unit3
ICustomer=Interface ['{F49C0018-37DA-463D-B5B4-4ED76416C7D4}']
procedure SetName(Value:String);
procedure SetDocument(Value:String);
function getName:String;
function getDocument:String;
End;
Unit4
Uses Unit1,Unit2,Unit3;
TGovernmentCustomer = class(TInterfacedObject, ICustomer, IRecorder,
IRefresher)
a: String;
public
{$REGION 'Customer'}
procedure SetName(Value: String); override;
procedure SetDocument(Value: String);
function getName: String; override;
function getDocument: String; override;
{$ENDREGION}
{$REGION 'Recorder'}
procedure Reader; override;
procedure Writer; override;
{$ENDREGION}
{$REGION 'Refresher'}
procedure Refresh; override;
function getRefreshed: boolean; override;
{$ENDREGION}
End;
它不起作用,因为许多错误,例如“在基类中找不到刷新”,
【问题讨论】:
-
只需删除“覆盖”指令。 “覆盖”用于覆盖在祖先类中声明为“虚拟”的方法。祖先类“TInterfacedObject”中不存在您的 8 个方法。
-
哦,谢谢,但现在我很困惑。如果我删除覆盖,如何保证我不会收到抽象错误?你有什么想法吗?
-
你的类实现了所有的接口方法。只是在实现接口方法时不需要指定
override,只需virtual类方法即可。这段代码没有抽象错误。