On Tue, 22 Mar 2005, ml wrote:
Quoting Marco van de Voort <[EMAIL PROTECTED]>:
Like first, I wouldn't like to spam this mailing list about interfaces. Can I contact you directly or somewhere else?
I would like to try to patch some things but I would probably have few questions how to implement it to satisfy everybody, or the general interfaces idea and implementation.
One major problem with interfaces is class <=> interface <=> class inflexibility and this is the root of everything.
Classes are fundamentally different from Interfaces. Interfaces only specify a set of methods (a VMT, essentially) where classes also contain data. When a class implements an interface, it just means that all methods as specified in the interface are available.
imagine interfaces declared IA, IB, IC, ID, and all standalone TA=class(TInterfacedObject,IA,IB,IC);
var a: IA; b: IB; c: IC; d: ID; obj: TA; begin a := obj; // result is pointer(obj) + 12; b := obj; // result is pointer(obj) + 16; c := obj; // result is pointer(obj) + 20; // Following is nonsense, its just like "as" would be direct // call to exception if you try to use class that inherits more // than one interface a := (object as IA); // correct b := (object as IB); // returns pointer to the first interface vmt=IA c := (object as IC); // returns pointer to the first interface vmt=IA // there's no way to do again it's like direct call to exception obj := a; // returns pointer(obj) + 12 ???
This is nonsense. You cannot assign an interface to a class. A class IMPLEMENTS an interface, it is not an interface.
Michael.
_______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal