¿Cuál es la razón por la que esto no se compilará?Cuando una clase implementa una interfaz descendiente, ¿por qué no cuenta automáticamente como implementar la interfaz base?
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 Éste es cómo hacer que funcione:
InterfaceA := ImplementsAB as InterfaceB;
o
InterfaceA := InterfaceB;
Es decir, si IInterfaceB hereda de IInterfaceA y TImplementsAB implementa IInterfaceB, no sería lógico para también implementar IInterfaceA y ser compatible con el tipo?
+1 No sabía la razón, ¡gracias! –
+1 de mí también. –
¿Qué "error" temprano de OLE/COM? –