Qual è il motivo per cui questo non verrà compilato?Quando una classe implementa un'interfaccia discendente, perché non conta automaticamente come l'implementazione dell'interfaccia di 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
In contrasto con questo è come faccio funzionare:
InterfaceA := ImplementsAB as InterfaceB;
o
InterfaceA := InterfaceB;
Voglio dire, se IInterfaceB eredita da IInterfaceA e TImplementsAB implementa IInterfaceB, non sarebbe logico per implementare anche IInterfaceA ed essere compatibile di tipo?
+1 Non sapevo il motivo, grazie! –
+1 anche da parte mia. –
Quale primo "bug" OLE/COM? –