Lý do gì sẽ không biên dịch?Khi một lớp thực hiện giao diện con cháu, tại sao nó không tự động được tính là thực hiện giao diện cơ sở?
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
Ngược lại đây là cách tôi làm cho nó hoạt:
InterfaceA := ImplementsAB as InterfaceB;
hoặc
InterfaceA := InterfaceB;
Ý tôi là, nếu IInterfaceB thừa hưởng từ IInterfaceA và TImplementsAB thực hiện IInterfaceB, nó sẽ không được hợp lý để thực hiện IInterfaceA và kiểu tương thích?
+1 Tôi không biết lý do, cảm ơn! –
+1 từ tôi nữa. –
Lỗi "OLE/COM" sớm nào? –