Eigenschaften für Schnittstellen definieren

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Eigenschaften erstellen - Index


Sie können einer als published deklarierten Eigenschaft in ähnlicher Weise eine Schnittstelle als Wert zuweisen wie ein Objekt. Allerdings unterscheidet sich hier der Mechanismus, durch den eine Komponente von der Implementierung der Schnittstelle Benachrichtigungen erhält. Im Beispiel unter Eigenschaften für Subkomponenten erstellen hat die Prozedur, die den Eigenschaftswert ändert, die Methode FreeNotification der Teilkomponente aufgerufen, die als Eigenschaftswert zugewiesen wurde. Dadurch wurde es der Komponente ermöglicht, sich zu aktualisieren, wenn die Komponente freigegeben wurde, die als Eigenschaftswert fungiert hat. Handelt es sich bei dem Eigenschaftswert um eine Schnittstelle, dann haben Sie keinen Zugriff auf die Komponente, die diese Schnittstelle implementiert. Infolgedessen ist ein Aufruf der Methode FreeNotification nicht möglich.

In diesem Fall können Sie die Methode ReferenceInterface der Komponente aufrufen:

procedure TDemoComponent.SetMyIntfProp(const Value: IMyInterface);
begin
  ReferenceInterface(FIntfField, opRemove);
  FIntfField := Value;
  ReferenceInterface(FIntfField, opInsert);
end;

Der Aufruf von ReferenceInterface mit der Angabe einer Schnittstelle hat die gleiche Wirkung wie der Aufruf der Methode FreeNotification einer anderen Komponente. Nachdem die Set-Prozedur, die den Eigenschaftswert ändert, ReferenceInterface aufgerufen hat, können Sie daher die Methode Notification überschreiben, um die Benachrichtigungen von der Komponente, die die Schnittstelle implementiert, zu behandeln:

procedure TDemoComponent.Notification(AComponent: TComponent; Operation: TOperation);
begin
  inherited Notification(AComponent, Operation);
  if (Assigned(MyIntfProp)) and (AComponent.IsImplementorOf(MyInftProp)) then
    MyIntfProp := nil;
end;

Beachten Sie, dass in der überschriebenen Methode Notification der Eigenschaft MyIntfProp und nicht dem als private definierten Feld (FIntfField) der Wert nil zugewiesen wird. Damit wird gewährleistet, dass die Methode Notification die Set-Prozedur aufruft, die den Eigenschaftswert ändert. Diese Set-Prozedur ruft wiederum ReferenceInterface auf, um die Benachrichtigungsanforderung zu entfernen, die durch das Ändern des Eigenschaftswertes ausgelöst wurde. Alle Zuweisungen zur Schnittstelleneigenschaft müssen über die Set-Prozedur erfolgen.

Siehe auch