Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Lokale Typdefinitionen wo? (https://www.delphipraxis.net/152739-lokale-typdefinitionen-wo.html)

idefix2 4. Jul 2010 15:01

Lokale Typdefinitionen wo?
 
Hallo,

ich finde für folgendes Problem keine gescheite Lösung, vielleicht stehe ich nur auf der Leitung, oder vielleicht geht es ganz einfach nicht:

Ich würde gerne in einer Unit einen Record-Typ deklarieren, der nur in dieser Unit bekannt sein sollte. Normalerweise würde ich die Definition einfach in den Implementation-Bereich stellen. Aber ich brauche diesen Record-Typ als private-Variable einer Klasse, die im Interface-Bereich deklariert ist.

mkinzler 4. Jul 2010 15:01

AW: Lokale Typdefinitionen wo?
 
Unterhalb von
Delphi-Quellcode:
Implementation

BenjaminH 4. Jul 2010 15:06

AW: Lokale Typdefinitionen wo?
 
vll. geht es den Typen im Interface Abschnitt forward zu deklarieren?

Hawkeye219 4. Jul 2010 15:18

AW: Lokale Typdefinitionen wo?
 
Hallo,

du kannst die Record-Definition entweder in eine eigene Unit auslagern oder den Record innerhalb deiner Klasse definieren:

Delphi-Quellcode:
type
  TYourType = class
  private
    type
      TYourRecord = record
        ...
      end;
  public
    ...
  end;
Gruß Hawkeye

idefix2 4. Jul 2010 15:42

AW: Lokale Typdefinitionen wo?
 
@BenjaminH
Forward geht meines Wissens für record Deklarationen nicht, nur für Prozeduren und Funktionen. Wie sollte das syntaktisch aussehen?

@Hawkeye219
Wenn ich die record-Definition in eine eigene Unit auslagere, ist sie erst recht überall zugänglich, dann kann ich sie gleich im Interface Abschnitt dieser Unit lassen. Es ist ja kein grossen Unglück, ich hätte den record eben lieber unveröffentlicht gelassen.

Wenn ich den record innerhalb der Klasse deklariere, steht er nur in der Klasse zur Verfügung. Ich brauche ihn aber noch mehrmals in der Unit ausserhalb der Klasse.

mkinzler 4. Jul 2010 15:46

AW: Lokale Typdefinitionen wo?
 
Er meint für die Klasse. diese im Interface als forward deklarieren und dann im Implementation implementieren

Hawkeye219 4. Jul 2010 17:27

AW: Lokale Typdefinitionen wo?
 
Zitat:

Zitat von idefix2 (Beitrag 1033461)
Wenn ich die record-Definition in eine eigene Unit auslagere, ist sie erst recht überall zugänglich, dann kann ich sie gleich im Interface Abschnitt dieser Unit lassen.

Wenn du die Definition im (sichtbaren) Interface-Teil deiner Unit vornimmst, ist sie für jeden Nutzer dieser Unit zugänglich. Lagerst du die Definition in eine eigene Unit aus, muss diese zusätzliche Unit im Fremdcode explizit per USES eingebunden werden, damit die Definition sichtbar wird. Ich würde in einem solchen Fall durch eine geeignete Benennung deutlich machen, dass es sich um eine private Unit handelt.

Noch ein Tipp: packe nicht zu viel Code in eine Unit (SRP). Durch die Aufteilung des Codes kannst du die Übersicht verbessern, die Wahrscheinlichkeit für Wiederverwendung von Code erhöhen und das Testen einzelner Teile vereinfachen. Falls der Record kein reines Datenobjekt ist, wäre es dann nicht möglich, ihn um Methoden zu erweitern oder ihn sogar in eine Klasse umzuwandeln? Dies würde dann auf jeden Fall eine Verlagerung in eine eigene Unit rechtfertigen.

Gruß Hawkeye

mjustin 4. Jul 2010 20:30

AW: Lokale Typdefinitionen wo?
 
Zitat:

Zitat von idefix2 (Beitrag 1033461)

Wenn ich den record innerhalb der Klasse deklariere, steht er nur in der Klasse zur Verfügung. Ich brauche ihn aber noch mehrmals in der Unit ausserhalb der Klasse.

Das ist nur bei Verwendung von strict private richtig. Bei einfachem private ist der Typ TYourType.TYourRecord in der gesamten Unit verwendbar:

Delphi-Quellcode:
type
  TYourType = class
  private
    type
      TYourRecord = record
        a: Integer;
      end;
  end;

  TType2 = class
  procedure X(A: TYourType.TYourRecord);
  end;

implementation

procedure TType2.X(A: TYourType.TYourRecord);
begin
end;

procedure Y(A: TYourType.TYourRecord);
begin
end;
(Delphi 2009)

idefix2 4. Jul 2010 21:48

AW: Lokale Typdefinitionen wo?
 
Ich habe ja gewusst, dass ich noch etwas brauchen werde, um in der ganzen OOP Geschichte wirklich sattelfest zu werden - Delphi ist eben doch um einige Grössenordnungen komplexer als das gute alte Turbo Pascal, mit dem ich mich in den vergangenen 30 Jahren beschäftigt habe. Natürlich, so muss es gehen. Danke

mkinzler 4. Jul 2010 23:06

AW: Lokale Typdefinitionen wo?
 
Die OOP ala Turbo Pascal war halt schon etwas speziell


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:56 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