Thanks for info. Well. Now I see the technical reason for it. I thought so too.
Sure, I'm not a guru in compiler construction, but I'd like to know. Is this a logic by design that I easily get into a situation when querying interfaces is not "transitive". I mean, having one of class interfaces I get another interface using which I cannot query the first one anymore. Doesn't it defeat the purpose of interfaces? Seems like instead of staying away of class internals, I am forced to know the underlying details. See example below. The same commenting again gives another results. The last Print call just says that interface is not supported (btw, in Delphi also) if implemented using "implements". type IIntf1 = interface ['{925B72C3-B47D-432A-AED8-544B3306055B}'] end; IIntf2 = interface ['{E5C9BAC0-CE6D-42A8-BC85-F0AA51360E83}'] procedure Print; end; { TClassBase } TClassBase = class(TInterfacedObject{, IIntf2}) Int:Integer; procedure Print; end; { TClass1 } TClass1 = class(TClassBase, IIntf1) public constructor Create; end; { TClass2 } TClass2 = class(TClassBase, IIntf1, IIntf2) private FIntf: IIntf1; public constructor Create; procedure Print; property Intf:IIntf1 read FIntf implements IIntf1; //COMMENT THIS LINE end; { TClassBase } procedure TClassBase.Print; begin WriteLn('TClassBase.Print ', Int); end; constructor TClass2.Create; var O:TClass1; begin Int:=3; O:=TClass1.Create; O.Int:=30; FIntf:=O; end; { TClass1 } constructor TClass1.Create; begin Int:=1; end; procedure TClass2.Print; begin WriteLn('TClass2.Print ', Int); end; var C2:TClass2; I1:IIntf1; I2:IIntf2; begin try C2:=TClass2.Create; C2.Print; I1:=C2 as IIntf1; I2:=C2 as IIntf2; I2.Print; I2:=I1 as IIntf2; I2.Print; except on E:Exception do WriteLn(E.Message); end; readln; end. On Wed, Nov 25, 2009 at 9:36 AM, Andrew Hall <andrew.h...@shaw.ca> wrote: > This code is working correctly/logically - and the same as it does in > Delphi... > > Regards, > > Andrew Hall. > > _______________________________________________ > fpc-pascal maillist - fpc-pascal@lists.freepascal.org > http://lists.freepascal.org/mailman/listinfo/fpc-pascal > -- Best regards, Denis Golovan
_______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal