![]() |
Properties in Interfaces
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Zusammen,
bezugnehmend auf diesen ![]() Ich hab mein Interface um eine Property erweitert:
Delphi-Quellcode:
In meinem Host hab ich die Klasse dementsprechend erweitert:
unit Unit2;
interface type IMyInterfaceInternal = Interface function GetOnOffTimer: Boolean; procedure SetOnOffTimer(b: Boolean); end; IHostInterface = interface(IMyInterfaceInternal) procedure TimerEvent; property OnOffTimer: Boolean read GetOnOffTimer write SetOnOffTimer; end;
Delphi-Quellcode:
Wobei ich dort ja eigentlich nicht die Property und den Getter und Setter brauch, weil ich dort ja die Property versorgen möchte um in meiner BPL etwas auszuführen.
type
THostInterface = class(TInterfacedObject, IHostInterface) private function get_Feld: Boolean; procedure set_Feld(b: Boolean); public procedure TimerEvent; property OnOffTimer: Boolean read get_Feld write set_Feld; end; In meiner BPL wird das Interface "nur" als Variable übergeben, so dass ich dort keine Klasse habe, um auf das Event zu reagieren.
Delphi-Quellcode:
Wie kann ich nun richtig eine Property anlegen um von meiner Hostanwendung in der BPL, wie jetzt in diesem Testprojekt, den Timer ein- und ausschalten?
uses
Vcl.ExtCtrls, System.Classes, Unit2; type TSPS = class(TObject) private { Private-Deklarationen } Timer: TTimer; procedure TimerEvent(Sender: TObject); public { Public-Deklarationen } Host: IHostInterface; constructor Create; destructor Destroy; override; end; var SPS: TSPS; implementation procedure InitBPL(const AHost: IHostInterface); begin SPS.Host := AHost; end; |
AW: Properties in Interfaces
gar nicht.
Interfaces sind eine Vereinbarung von Öffentlichen Funktionen und Procedures. Die Möglichkeit, in einer Interfacedeklaration Properties anzulegen, ist ein 'Goodie'. Leg einfach den Getter und den Setter, den Du im Interface refernzierst, in der entsprechenden Klasse public an. Die Property muss in der Klasse nicht implementiert werden. |
AW: Properties in Interfaces
Properties sind eh nur Syntax-Zucker. Du kannst Sie nicht als Var-Parameter übergeben, ich mache nie Properties. Getter und Setter reichen dicke 8-)
|
AW: Properties in Interfaces
Zitat:
Implementierungen von Interfaces können sogar private sein, solange sie nicht auch in abgeleiteten Klassen benötigt werden. Eigentlich ist das auch vorzuziehen, da diese Methoden von außen in der Regel nur über das Interface angesprochen werden sollen und nicht über die Klasseninstanz. |
AW: Properties in Interfaces
Hallo,
also einfach functions und procedures anlegen und die dann im Host aufrufen? Aber wie reagier ich in der BPL darauf? |
AW: Properties in Interfaces
Zitat:
Zitat:
|
AW: Properties in Interfaces
Zitat:
Konkret gibt es im IHostInterface ein RegisterClient, das wiederum ein Interface weitergibt. Auf die Weise kann die Anwendung in beide Richtungen kommunizieren. Wir machen das dann so, dass wir in einer Methode GetInterface die GUID des benötigten Interfaces anfragen und dann die entsprechende Implementierung als Instanz zurückbekommen. So können wir über eine schlanke Schnittstelle sehr viel Funktionalität durchleiten. Wir würden also konkret vom Host aus am Client z.B. einen ITimerManager anfragen, der dann z.B. eine Property TimerEnabled hat. |
AW: Properties in Interfaces
Zitat:
|
AW: Properties in Interfaces
Das hatte ich schon länger vor... ich weiß nicht, ob ich in den nächsten Tagen dazu komme.
|
AW: Properties in Interfaces
Zitat:
2 Gründe:
Mavarik |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz