[fpc-pascal] casting interfaces and objects
Marco van de Voort
marcov at stack.nl
Sun May 18 23:07:12 CEST 2008
> I have two questions about interface usage.
>
> 1. How interfaces are to handle when casting?
> Theoretically it should be safe to do this:
>
> TObservable = class
> public
> procedure Register( obsv: IObserver );
> private
> procedure NotifyObservers(param: TParameter);
> fObservers: TFPObjectList;
> end;
>
> procedure TObservable.Register( obsv: IObserver );
> begin
> fObservers.add(TObject(obsv));
> end;
No it is not safe. The interface points to an interface table, and you cast
it if it were a class VMT.
Have a look at IInterfaceComponentReference and use/implement the
getcomponent method. Note that this was added post-2.2.0
More information about the fpc-pascal
mailing list