On Sun, Nov 2, 2008 at 6:31 PM, Vladimir Zhirov <[EMAIL PROTECTED]> wrote: > > "Supports" does not seem to take into account interfaces inheritance, > so to make the second call work as expected, I have to change TMyClass > declaration to > >> TMyClass = class(IInterfacedObject, IMyBasicInterface, IMyExtendedInterface) > > So the questions are: > 1) Is this an expected behavior?
I'm not an expert with Interfaces, but as far as I understood the documentation and from what I have seen in other code, that is expected behaviour. Below is information from the Kylix 3 help: -----------------------[ kylix 3 help ]------------------------- An interface-type expression cannot reference an object whose class implements a descendant interface, unless the class (or one that it inherits from) explicitly implements the ancestor interface as well. For example, type IAncestor = interface end; IDescendant = interface(IAncestor) procedure P1; end; TSomething = class(TInterfacedObject, IDescendant) procedure P1; procedure P2; end; ... var D: IDescendant; A: IAncestor; begin D := TSomething.Create; // works! A := TSomething.Create; // error D.P1; // works! D.P2; // error end; In this example, A is declared as a variable of type IAncestor. Because TSomething does not list IAncestor among the interfaces it implements, a TSomething instance cannot be assigned to A. But if we changed TSomething's declaration to TSomething = class(TInterfacedObject, IAncestor, IDescendant) ...the first error would become a valid assignment. -----------------------[ end ]----------------------------- Regards, - Graeme - _______________________________________________ fpGUI - a cross-platform Free Pascal GUI toolkit http://opensoft.homeip.net/fpgui/ _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal