AW: Die alte Leier: Zirkulaere Referenzen, aber warum nicht so: ...?
Zitat:
Nachdem du mir dabei geholfen hast mit den Interfaces zurecht zu kommen arbeite ich auch sehr gerne damit. Da ist man wirklich sehr flexibel. gruss |
AW: Die alte Leier: Zirkulaere Referenzen, aber warum nicht so: ...?
Zitat:
Ich moechte mir diese Technik auch aneignen, finde aber leider keine interface Beispiele, die genau fuer diesen Zweck angelegt sind. Ich brauch das einfach mal schwarz auf weiss, minimal und vollstaendig. |
AW: Die alte Leier: Zirkulaere Referenzen, aber warum nicht so: ...?
Ein minimales Beispiel:
Delphi-Quellcode:
// MyMain.pas
uses UnitX, MainInterface; type TMyMain = class(TForm, IMainInterface) StatusEdit: TEdit; public procedure SetStatusMessage(const AValue: string); end; [...] procedure TMyMain.SetStatusMessage(const AValue: string); begin StatusEdit.Text := AValue; end; // Aufruf: PerformHCoreOperation(Self);
Delphi-Quellcode:
unit MainInterface;
... type IMainInterface = interface ['{2A2A7B02-5612-44C4-8A76-D90C857C36C7}'] procedure SetStatusMessage(const AValue: string); end;
Delphi-Quellcode:
Das ist nur ein minimales Beispiel und eine Trennung des Formulars von der Klasse, die IMainInterface implementiert wäre durchaus wünschenswert, aber für den Anfang reicht das so vollkommen aus.
unit UnitX;
uses MainInterface; procedure PerformHCoreOperation(const AStatusInterface: IMainInterface); begin AStatusInterface.SetStatusMessage('PowerMonger status ON!'); end; Die GUID (im Interface, hier ['{2A2A7B02-5612-44C4-8A76-D90C857C36C7}']) dient dazu das Interface eindeutig zu identifizieren. Du kannst diese mit Strg + Shift + G in Delphi erzeugen. |
AW: Die alte Leier: Zirkulaere Referenzen, aber warum nicht so: ...?
Ist die GUID für das Interface eigentlich zwingend notwendig, wenn man das nur in seinem eigenem Projekt verwendet?
|
AW: Die alte Leier: Zirkulaere Referenzen, aber warum nicht so: ...?
Zitat:
Um Problemen aus dem Weg zu gehen würde ich immer eine GUID empfehlen |
AW: Die alte Leier: Zirkulaere Referenzen, aber warum nicht so: ...?
Was habe ich da nur losgetreten? :shock:
[QUOTE=Fritzew;1377492] Zitat:
bei interfaces mit generics rate ich entschieden davon ab. |
AW: Die alte Leier: Zirkulaere Referenzen, aber warum nicht so: ...?
Zitat:
|
AW: Die alte Leier: Zirkulaere Referenzen, aber warum nicht so: ...?
Um aus dem Skript bestimmte Interfaces anfragen zu können, müssen diese bei uns alle eine GUID haben. Aus dem Grund sind generische Interfaces bei uns immer noch einmal abgeleitet und dort mit einer GUID versehen.
|
AW: Die alte Leier: Zirkulaere Referenzen, aber warum nicht so: ...?
+1 Guter Vorschlag :lol:
Bislang habe ich generische Interfaces vermieden um Probleme zu Vermeiden ... Rollo |
AW: Die alte Leier: Zirkulaere Referenzen, aber warum nicht so: ...?
Machen wir auch so. Zum Beispiel:
Delphi-Quellcode:
Die implementierenden Klassen sind dann analog dazu.
IViewValueBase = interface(IViewBase)
['{3EF209C2-81FD-44C6-B231-328BA2FAABE5}'] procedure RegisterHostValidation(const p_ValidationMethod: THostPropertyValidationDelegate); procedure ClearRegisteredHostValidation(); end; IViewValueBase<T> = interface(IViewValueBase) function GetValue(): T; property Value: T read GetValue; end; IViewValue<T> = interface(IViewValueBase<T>) procedure SetValue(const p_Value: T); property Value: T read GetValue write SetValue; end; IViewValueBoolean = interface(IViewValue<Boolean>) ['{13871F02-44C4-40C4-B2D7-4A592D2A86D3}'] end; IViewValueString = interface(IViewValue<String>) ['{1322615D-4628-4398-806D-E4E34BCF3BCE}'] end; IViewValueInteger = interface(IViewValue<Integer>) ['{42524A7C-8BAF-41B4-90D0-77D8C457EDC9}'] end; IViewValueDouble = interface(IViewValue<Double>) ['{016EE305-1856-4CD5-ACC2-9021F52DED63}'] end; ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz