type
TLogs = class(TObject)
public
function Read(const ADate: TDateTime): string; virtual; abstract;
procedure Write(const AMessage: string); virtual; abstract;
end;
TTextLogs = class(TLogs)
function Read(const ADate: TDateTime): string; override;
procedure Write(const AMessage: string); override;
end;
TLogs = class(TObject)
public
function Read(const ADate: TDateTime): string; virtual; abstract;
procedure Write(const AMessage: string); virtual; abstract;
end;
TTextLogs = class(TLogs)
function Read(const ADate: TDateTime): string; override;
procedure Write(const AMessage: string); override;
end;
接口的方法不需要virtual; abstract;指示字,在实现类中也不需要 override; 指示字。
尽可能不要对象与接口混用。
获取接口指针的两种方法:
1>
var
MyClass: TClass;
MyInterface: iInterface;
begin
MyClass := TClass.Create;
MyInterface := MyClass; //注意接口被释放时对像会被自动地销毁
end;
MyClass: TClass;
MyInterface: iInterface;
begin
MyClass := TClass.Create;
MyInterface := MyClass; //注意接口被释放时对像会被自动地销毁
end;
2>
var
MyInterface: iInterface;
begin
MyInterface := TClass.Create; //如果TClass不支持接口会产生一个异常
end;
MyInterface: iInterface;
begin
MyInterface := TClass.Create; //如果TClass不支持接口会产生一个异常
end;
3> 通过 GetInterface 获取接口指针
var
MyObject: TObject;
MyInterface: iInterface;
begin
MyObject := TClass.Create;
MyObject: TObject;
MyInterface: iInterface;
begin
MyObject := TClass.Create;
if MyObject.GetInterface(iInterface, MyInterface) then
end;
# MyInterface := nil; //强行销毁接口
# 接口可以定义属性,但所有访问必须通过方法函数访问,因为接口不能有域。
访问函数必须是其它用户可见的。