Bei Verwendung von implements muss das implementierende Objekt entweder das besagte Interface bereitstellen (mittels QueryInterface) oder das Interface implementieren (sprich: die Methoden bereitstellen). Im ersten Fall bekommt man einen Interface-Zeiger auf den Implementer, im anderen auf den Container.
Wenn der Implementer von TAggregatedObject abgeleitet wird ohne das ein Interfacename in der Deklaration auftaucht, dann auch wird kein Interface-Zeiger zurückgegeben. Andernfalls würde das schon geschehen, aber durch die Implementierung von QueryInterface gelangt man für weitere Interfaces doch wieder zum Controller/Container.
Beim ersten Ansatz (TAggregatedObject ohne Interface-Deklaration) reicht es auch, wenn nur Teile des Interfaces von der Implementor-Klasse bereitgestellt werden, solange die fehlenden Methoden vom Container implementiert werden.
Delphi-Quellcode:
type
IMyInterface =
interface
[<
GUID>]
procedure Foo;
procedure Bar;
end;
TMyImplementor =
class(TAggregatedObject)
procedure Foo;
end;
TMyContainer =
class(TInterfacedObject, IMyInterface)
...
protected
procedure Bar;
property MyImplementor: TMyImplementor
read GetMyImplementor
implements IMyInterface;
end;