![]() |
Record zum Teil als Konstante und Variable?
Hallo,
ist es möglich, dass man einen Record erstellt und den später zum Teil als Variable und zum Teil als Konstante deklariert?
Delphi-Quellcode:
type
TmyRecord = record String_1: String; String_2: String; Boolean1: Boolean; Boolean2: Boolean; Boolean3: Boolean; end; Nun wäre es für mich interessant, ob zum Beispiel die Strings als Variablen und die Boolean ans Konstante festgelegt werden könnten. LG Mathias |
AW: Record zum Teil als Konstante und Variable?
Ja.
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils; type TmyRecord = record var String_1: String; String_2: String; const Boolean1: Boolean = True; Boolean2: Boolean = False; Boolean3: Boolean = True; end; var FooBar: TmyRecord; begin try FooBar.String_1 := 'Hello'; FooBar.String_2 := 'World!'; Writeln(FooBar.String_1, ' ', FooBar.String_2, ' ', FooBar.Boolean1, ' ', FooBar.Boolean2, ' ', FooBar.Boolean3); except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; Readln; end. |
AW: Record zum Teil als Konstante und Variable?
Vielen Dank!
Das ist ja einfacher, als vermutet. :oops: |
AW: Record zum Teil als Konstante und Variable?
Zitat:
Delphi-Quellcode:
Dies ist zwar im Prinzip das, wonach Du fragst, aber ich glaube es ist nicht das, was Du meinst. Denn ich glaube Du meinst, dass Du den Record einmalig zuweist, so dass der konstante Teil danach nicht mehr geändert werden kann.
type
TmyRecord = record var String_1: String; String_2: String; const Boolean1 = True; Boolean2 = False; Boolean3 = True; end;
Delphi-Quellcode:
Die Booleans sind aber immer so wie oben deklariert. Es ist also nicht möglich, sie einmalig für jede Instanz auf einen Wert zu setzen und erst danach als Konstante zu betrachten. MyRecord1.Boolean1 und MyRecord2.Boolean1 haben beide immer den Wert, der in der Typdeklaration zugewiesen wurde: True.
var
MyRecord1: TMyRecord; MyRecord2: TMyRecord; begin MyRecord1.String_1 := 'bla'; MyRecord1.String_2 := 'blub'; MyRecord2.String_1 := 'blub'; MyRecord2.String_2 := 'bla'; end; Das ließe sich aber mittels eines Konstruktors und ReadOnly-Properties lösen, genauso wie bei Klassen. |
AW: Record zum Teil als Konstante und Variable?
Zitat:
LG Mathias |
AW: Record zum Teil als Konstante und Variable?
VAR muß man nicht angeben, denn am Anfang einer Section (private/public/...) ist VAR der Standard
um eine Ebene zu sparen lasse ich die einrückung weg und für die Ordnung kommen meistens einzelne Gruppen in eine eigene Section
Delphi-Quellcode:
type
TmyRecord = record String_1: String; String_2: String; const Boolean1 = True; const Boolean2 = False; const Boolean3 = True; end; TmyRecord = record public const Boolean1 = True; const Boolean2 = False; Boolean3 = True; // ABER ist auch eine CONST public String_1: String; String_2: String; end; // ich mach es meistens so TmyRecord = record private const Boolean1 = True; Boolean2 = False; public const Boolean3 = True; public String_1: String; String_2: String; end; // weil mir das zu blöd ist TmyRecord = record private const Boolean1 = True; Boolean2 = False; public const Boolean3 = True; public String_1: String; String_2: String; end; |
AW: Record zum Teil als Konstante und Variable?
Zitat:
Danke! Wo gilt denn public const überall? |
AW: Record zum Teil als Konstante und Variable?
Überall. Public und Const ist ja getrennt,
aber der Übersicht halber versuche ich in einem Block nichts zu mischen, also entweder nur variablen und nur Konstanten. Daher lässt sich das sehr gut in eine Zeile scheiben. für Records ist die Liste dann auch recht einfach
Delphi-Quellcode:
private type
private const private public type public const public // das ist bei Records der Standard für die erste Zeile, wenn man nichts angegeben hat |
AW: Record zum Teil als Konstante und Variable?
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz