Cuando una clase implementa una interfaz descendiente, ¿por qué no cuenta automáticamente como la implementación de la interfaz base?
¿Cuál es la razón por la que esto no se compilará?
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
En contraste, así es como lo hago funcionar:
InterfaceA := ImplementsAB as InterfaceB;
InterfaceA := InterfaceB;
Quiero decir, si IInterfaceB hereda de IInterfaceA y TImplementsAB implementa IInterfaceB, ¿no sería lógico también implementar IInterfaceA y ser compatible con el tipo?