[fpc-pascal] Question about interfaces
Michael Van Canneyt
michael.vancanneyt at wisa.be
Wed Mar 23 09:45:06 CET 2005
On Tue, 22 Mar 2005, ml wrote:
>
>>> Quoting Marco van de Voort <marcov at stack.nl>:
>
> 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.
More information about the fpc-pascal
mailing list