AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Lokale Typdefinitionen wo?

Ein Thema von idefix2 · begonnen am 4. Jul 2010 · letzter Beitrag vom 4. Jul 2010
Antwort Antwort
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#1

Lokale Typdefinitionen wo?

  Alt 4. Jul 2010, 15:01
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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Lokale Typdefinitionen wo?

  Alt 4. Jul 2010, 15:01
Unterhalb von Implementation
Markus Kinzler
  Mit Zitat antworten Zitat
BenjaminH

Registriert seit: 14. Okt 2004
Ort: Freiburg im Breisgau
713 Beiträge
 
Turbo Delphi für Win32
 
#3

AW: Lokale Typdefinitionen wo?

  Alt 4. Jul 2010, 15:06
vll. geht es den Typen im Interface Abschnitt forward zu deklarieren?
Benjamin
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#4

AW: Lokale Typdefinitionen wo?

  Alt 4. Jul 2010, 15:18
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
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#5

AW: Lokale Typdefinitionen wo?

  Alt 4. Jul 2010, 15:42
@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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Lokale Typdefinitionen wo?

  Alt 4. Jul 2010, 15:46
Er meint für die Klasse. diese im Interface als forward deklarieren und dann im Implementation implementieren
Markus Kinzler
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#7

AW: Lokale Typdefinitionen wo?

  Alt 4. Jul 2010, 17:27
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
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.004 Beiträge
 
Delphi 2009 Professional
 
#8

AW: Lokale Typdefinitionen wo?

  Alt 4. Jul 2010, 20:30

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)
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#9

AW: Lokale Typdefinitionen wo?

  Alt 4. Jul 2010, 21:48
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Lokale Typdefinitionen wo?

  Alt 4. Jul 2010, 23:06
Die OOP ala Turbo Pascal war halt schon etwas speziell
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:15 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