Autor Beitrag
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Mo 16.10.06 13:31 
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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Klabautermann Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: 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