【发布时间】:2012-01-18 01:42:07
【问题描述】:
这不会编译的原因是什么?
type
IInterfaceA = interface ['{44F93616-0161-4912-9D63-3E8AA140CA0D}']
procedure DoA;
end;
IInterfaceB = interface(IInterfaceA) ['{80CB6D35-E12F-462A-AAA9-E7C0F6FE0982}']
procedure DoB;
end;
TImplementsAB = class(TSingletonImplementation, IInterfaceB)
procedure DoA;
procedure DoB;
end;
var
ImplementsAB: TImplementsAB;
InterfaceA: IInterfaceA;
InterfaceB: IInterfaceB;
begin
ImplementsAB := TImplementsAB.Create;
InterfaceA := ImplementsAB; >> incompatible types
...
end
相比之下,这是我的工作方式:
InterfaceA := ImplementsAB as InterfaceB;
或
InterfaceA := InterfaceB;
我的意思是,如果 IInterfaceB 继承自 IInterfaceA 而 TImplementsAB 实现了 IInterfaceB,那么同时实现 IInterfaceA 并且类型兼容就不合逻辑了吗?
【问题讨论】:
标签: delphi interface delphi-2010