Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#11

AW: Den Delegaten nachträglich ändern - Unterschiedliches Verhalten

  Alt 30. Jan 2014, 00:22
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;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat