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

Reply via email to