Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Unsichtbarer Record


Klabautermann - Mo 16.10.06 13:31
Titel: Unsichtbarer Record
Hallo,

ich hätte da mal eine Interessensfrage, über die ich immer mal wieder Stolpere.

Es kommt häufiger mal vor, dass ich einen Record definiere, welcher nur Intern in einem meiner Objekte verwendet werden soll. NAch außenhinn ist der vollig unwichtig, wenn er als Parameter oder rückgabewert verwendet wird, dann nur im private oder public Bereichen. Wenn ich ihn aber dort verwenden möchte, muss er ja vor der Klassendeklaration defioniert werden, also so:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
type
      tMyInternRecord = record
         zeit : tDateTime;
         text : string;
      end;

      TMyClass = class(TObject)
      protected
         function GetInternData : tMyInternRecord;
      public
         {...}
      end;


Ist es möglich, den Record "im verborgenen" zu deklarieren, also so, dass er von außerhalb der Unit nicht sichtbar ist? Nicht das es schlimm oder störend währe, dass man nun auch in anderen Units den Typ verwenden kann, es ist nur einfach nicht nötig, daher Frage ich mich, ob es sich verhindern lässt.

Gruß
Klabautermann


BenBE - Mo 16.10.06 14:01

Wenn man diesen Typ direkt als Parameter oder Rückgabewert verwenden möchte, dann nicht ...

Du kannst aber jegliche Rückgabewerte als Pointer deklarieren und dann die Deklaration in den Impl-Teil verschieben ... Das macht aber mehr Nutzen als es wirklich bringt.


UGrohne - Mo 16.10.06 15:30

user profile iconBenBE hat folgendes geschrieben:
Das macht aber mehr Nutzen als es wirklich bringt.
Oder eher: Es macht mehr Arbeit, als man dafür Zeit aufwenden muss.


Christian S. - Mo 16.10.06 16:35

Wenn er in public-Methoden als Rückgabewert dient, macht es keinen Sinn, ihn zu verbergen.

Weiterhin kennt Delphi ja leider keine Sichtbarkeit von Typen. Ab Delphi 2005 wäre daher die einzige Möglichkeit, den Record in der Klasse verschachtelt zu deklarieren mit dem Sichtbarkeitslevel, das minimal nötig ist.


Klabautermann - Mo 16.10.06 17:42

Hi,
user profile iconBenBE hat folgendes geschrieben:
Du kannst aber jegliche Rückgabewerte als Pointer deklarieren und dann die Deklaration in den Impl-Teil verschieben ... Das macht aber mehr Nutzen als es wirklich bringt.

ja, die Pointer Idee kahm mir auch schon ist aber völlig Sinlos, da es hier ja um eine "schönheitskorrektur" geht und das nicht umbedingt schöner ist ;).

user profile iconUGrohne hat folgendes geschrieben:
user profile iconBenBE hat folgendes geschrieben:
Das macht aber mehr Nutzen als es wirklich bringt.
Oder eher: Es macht mehr Arbeit, als man dafür Zeit aufwenden muss.

Sooo voiel Arbeit macht das nicht, du weißt doch: Ich mag pointer. Man sollte die im .NET wieder einführen ;).



user profile iconChristian S. hat folgendes geschrieben:
Wenn er in public-Methoden als Rückgabewert dient, macht es keinen Sinn, ihn zu verbergen.

Deshalb machte ich die Einschränkung in der Frage ;).

user profile iconChristian S. hat folgendes geschrieben:
Weiterhin kennt Delphi ja leider keine Sichtbarkeit von Typen. Ab Delphi 2005 wäre daher die einzige Möglichkeit, den Record in der Klasse verschachtelt zu deklarieren mit dem Sichtbarkeitslevel, das minimal nötig ist.


Tja, aber ich noch immer meist im D7 arbeite hilft es nicht.

Naja, schade aber ich kann heute abend in der Gewissheit auf die Isomatte gehen, das es hier kein Delphi-Sprachelement gibt, welches ich übersehen habe ;).

Gruß
Klabautermann