Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Typendeklaration über 3 Units


trm - Sa 26.05.12 14:37
Titel: Typendeklaration über 3 Units
Hallo,

meine Frage ist evtl. schon oft behandelt, aber ich habe nichts gefunden oder falsch gesucht.

In eienr Unit habe ich Typen deklariert.
In einer zweiten Unit binde ich die 1. Unit ein, um Variablen mit den Typen zu deklarieren.
In der 3. Unit wird die 2. unit eingebunden, so dass die Typenunit hier nicht bekannt ist.

Also wird ein Type nicht über mehrere Units vererbt und ich muss die 1. Unit in die 3. auch einbinden, damit der Type bekannt ist ?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
// Unit 1
type
  TTextAlignX = (dsLeft, dsCenter, dsRight);

  TTest=record
    fText_horizontal: TTextAlignX;
  end;

// Unit 2
uses Unit1;

type
  TTestClass = class
  private
  public
    Test1: TTest;
[..]

//Unit 3
uses Unit2;

var nocheintest:TTestClass;

//wie kann ich hier eine Zuweisung vornehmen ?

nocheintest.Test1.fText_horizontal := dsLeft;



Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Sa 26.05.2012 um 17:07


jaenicke - Sa 26.05.12 15:15

Packe einfach in Unit 2:

Delphi-Quelltext
1:
  TTextAlignX = Unit1.TTextAlignX;                    
Dadurch wird der Typ auch über diese Unit verfügbar gemacht.


trm - Sa 26.05.12 18:17

Und was ist der Unterschied zur uses-Einbindung ?


jaenicke - Sa 26.05.12 18:23

Der Typ kann dann ggf. nicht vom Compiler inline eingebaut werden (sprich die Optimierung ist etwas schlechter). Wenn das der Fall ist, kommt aber eine entsprechende Compilermeldung, in der auch steht, welche Unit eingebunden werden sollte. In den meisten Fällen sollte es aber keinen Unterschied machen und ich glaube das inline-Problem gibt es nur bei komplexeren Typen wie Records (denn Konstanten wie hier werden eh nur ersetzt).


trm - Sa 26.05.12 19:47

Vielen Dank :)