On 2016-10-27 02:13, David Emerson wrote: > t_2 = class (_obj_type_, i_2) > // i_2 inherits from i_1, compiler requires i_1 implementation > procedure do_one; > procedure do_two; > end;
A common misconception about how interfaces work. In fact, I don't actually know why FPC and Delphi bother with Interface Inheritance, because I simply don't see the point. To make your "t_2" class support both interface, you need to specify both in the class declaration. Even though i_2 inherits from i_1, both i_1 and i_2 must be specified in the t_2 class. Again, I don't know why it is done like this, and works very different to class inheritance. Delphi 7 works exactly the same in this regard. Maybe somebody with more knowledge on the subject could shed some light. Here is a D7 example: ======================================= program Project1; {$APPTYPE CONSOLE} uses SysUtils; type IOne = interface ['{32271879-1C00-4A02-A9C0-6948844028D6}'] procedure One; end; ITwo = interface(IOne) ['{F3027177-6638-4984-B842-7D4E70299056}'] procedure Two; end; { If you only specify ITwo here, then the second Supports() call for i1.One will never execute. } TMyObject = class(TInterfacedObject, IOne, ITwo) private // IOne interface procedure One; // ITwo interface procedure Two; end; procedure TMyObject.One; begin writeln('One'); end; procedure TMyObject.Two; begin writeln('Two'); end; var o: TMyObject; i1: IOne; i2: ITwo; begin o := TMyObject.Create; if Supports(o, ITwo, i2) then i2.Two; if Supports(o, IOne, i1) then i1.One; i2 := nil; i1 := nil; end. ======================================= Regards, Graeme -- fpGUI Toolkit - a cross-platform GUI toolkit using Free Pascal http://fpgui.sourceforge.net/ My public PGP key: http://tinyurl.com/graeme-pgp _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal