很多人在接口定义中,喜欢使用派生的方式进行定义。但是我要说的是,接口不应该派生,而应该AS出来。
IInterface = interface
['']
function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
function _AddRef: Integer; stdcall;
function _Release: Integer; stdcall;
end;


end;
a: IA;
b: IB;
b := TB.Create;
a := IA(b);
b := IB(a);
end;
TB = class(TInterfacedObject, IB)
end;
IA = interface
['']
procedure A;
end;
IB = interface(IA)
['']
procedure B;
end;
TA = class(TInterfacedObject, IA)
procedure A;
end;
TB = class(TA, IB)
procedure B;
end;

...
procedure TB.B;
begin
end;

...
procedure TA.A;
begin
end;
procedure TForm1.Button1Click(Sender: TObject);
var
a: IA;
b: IB;
begin
b := TB.Create;
ShowMessage(IntToStr(Integer(b)));
a := IA(b);
ShowMessage(IntToStr(Integer(a)));
a := b as IA;
ShowMessage(IntToStr(Integer(a)));
end;
用户评论