AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Die alte Leier: Zirkulaere Referenzen, aber warum nicht so: ...?
Thema durchsuchen
Ansicht
Themen-Optionen

Die alte Leier: Zirkulaere Referenzen, aber warum nicht so: ...?

Ein Thema von hzzm · begonnen am 25. Jul 2017 · letzter Beitrag vom 27. Jul 2017
Antwort Antwort
Seite 2 von 2     12   
EWeiss
(Gast)

n/a Beiträge
 
#11

AW: Die alte Leier: Zirkulaere Referenzen, aber warum nicht so: ...?

  Alt 26. Jul 2017, 06:44
Zitat:
@Fritzew Das unterschreibe ich sofort.
Ich auch

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
  Mit Zitat antworten Zitat
hzzm

Registriert seit: 8. Apr 2016
103 Beiträge
 
Delphi 10 Seattle Professional
 
#12

AW: Die alte Leier: Zirkulaere Referenzen, aber warum nicht so: ...?

  Alt 26. Jul 2017, 08:00
Nachdem du mir dabei geholfen hast mit den Interfaces zurecht zu kommen
Gibt es zu Deinem Lern-Prozess Threads hier?
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.

Geändert von hzzm (26. Jul 2017 um 08:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#13

AW: Die alte Leier: Zirkulaere Referenzen, aber warum nicht so: ...?

  Alt 26. Jul 2017, 08:21
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:
unit UnitX;

uses
  MainInterface;

procedure PerformHCoreOperation(const AStatusInterface: IMainInterface);
begin
  AStatusInterface.SetStatusMessage('PowerMonger status ON!');
end;
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.

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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#14

AW: Die alte Leier: Zirkulaere Referenzen, aber warum nicht so: ...?

  Alt 26. Jul 2017, 10:11
Ist die GUID für das Interface eigentlich zwingend notwendig, wenn man das nur in seinem eigenem Projekt verwendet?
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#15

AW: Die alte Leier: Zirkulaere Referenzen, aber warum nicht so: ...?

  Alt 26. Jul 2017, 10:14
Zitat:
Ist die GUID für das Interface eigentlich zwingend notwendig, wenn man das nur in seinem eigenem Projekt verwendet?
Nicht zwingend aber manches geht nicht ohne. Z.B Supports, cast mit as oder auch der is Operator.
Um Problemen aus dem Weg zu gehen würde ich immer eine GUID empfehlen
Fritz Westermann
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.456 Beiträge
 
Delphi 11 Alexandria
 
#16

AW: Die alte Leier: Zirkulaere Referenzen, aber warum nicht so: ...?

  Alt 26. Jul 2017, 15:28
Was habe ich da nur losgetreten?

[QUOTE=Fritzew;1377492]
Zitat:
Um Problemen aus dem Weg zu gehen würde ich immer eine GUID empfehlen
Und der Haarspalter meldet sich wieder:
bei interfaces mit generics rate ich entschieden davon ab.
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: Die alte Leier: Zirkulaere Referenzen, aber warum nicht so: ...?

  Alt 26. Jul 2017, 15:35
Zitat:
Und der Haarspalter meldet sich wieder:
bei interfaces mit generics rate ich entschieden davon ab.
Ja die sind wirklich ein Spezialfall ....
Fritz Westermann
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#18

AW: Die alte Leier: Zirkulaere Referenzen, aber warum nicht so: ...?

  Alt 26. Jul 2017, 16:30
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.116 Beiträge
 
Delphi 12 Athens
 
#19

AW: Die alte Leier: Zirkulaere Referenzen, aber warum nicht so: ...?

  Alt 27. Jul 2017, 07:04
+1 Guter Vorschlag

Bislang habe ich generische Interfaces vermieden um Probleme zu Vermeiden ...

Rollo
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.456 Beiträge
 
Delphi 11 Alexandria
 
#20

AW: Die alte Leier: Zirkulaere Referenzen, aber warum nicht so: ...?

  Alt 27. Jul 2017, 13:19
Machen wir auch so. Zum Beispiel:

Delphi-Quellcode:
  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;
  ...
Die implementierenden Klassen sind dann analog dazu.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:00 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