AGB  ·  Datenschutz  ·  Impressum  







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

Record zum Teil als Konstante und Variable?

Ein Thema von NoGAD · begonnen am 3. Apr 2020 · letzter Beitrag vom 3. Apr 2020
Antwort Antwort
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
345 Beiträge
 
Delphi 10.4 Sydney
 
#1

Record zum Teil als Konstante und Variable?

  Alt 3. Apr 2020, 10:00
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
Mathias
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Record zum Teil als Konstante und Variable?

  Alt 3. Apr 2020, 10:20
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.
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
345 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Record zum Teil als Konstante und Variable?

  Alt 3. Apr 2020, 11:16
Vielen Dank!

Das ist ja einfacher, als vermutet.
Mathias
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.604 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Record zum Teil als Konstante und Variable?

  Alt 3. Apr 2020, 11:21

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;
Kommt drauf an, was Du meinst:

Delphi-Quellcode:
type
  TmyRecord = record
  var
    String_1: String;
    String_2: String;
  const
    Boolean1 = True;
    Boolean2 = False;
    Boolean3 = True;
  end;
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.

Delphi-Quellcode:
var
  MyRecord1: TMyRecord;
  MyRecord2: TMyRecord;
begin
  MyRecord1.String_1 := 'bla';
  MyRecord1.String_2 := 'blub';

  MyRecord2.String_1 := 'blub';
  MyRecord2.String_2 := 'bla';
end;
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.

Das ließe sich aber mittels eines Konstruktors und ReadOnly-Properties lösen, genauso wie bei Klassen.
Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
345 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Record zum Teil als Konstante und Variable?

  Alt 3. Apr 2020, 11:27
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.

Das ließe sich aber mittels eines Konstruktors und ReadOnly-Properties lösen, genauso wie bei Klassen.
Ja, aber das reicht mir erst einmal so. Dankeschön!

LG Mathias
Mathias
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#6

AW: Record zum Teil als Konstante und Variable?

  Alt 3. Apr 2020, 12:45
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;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
345 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Record zum Teil als Konstante und Variable?

  Alt 3. Apr 2020, 13:37
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:
  // 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;

Danke!

Wo gilt denn public const überall?
Mathias
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#8

AW: Record zum Teil als Konstante und Variable?

  Alt 3. Apr 2020, 18:09
Ü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
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.051 Beiträge
 
Delphi 2009 Professional
 
#9

AW: Record zum Teil als Konstante und Variable?

  Alt 3. Apr 2020, 18:47
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
strict private (in den drei Kombinationen) vergessen. Ergibt nur Sinn mit Eigenschaften und mit ausschließlich intern verwendeten Methoden, die durch Properties oder sichtbare Methoden aufgerufen werden.

Das ließe sich aber mittels eines Konstruktors und ReadOnly-Properties lösen, genauso wie bei Klassen.
Nur bedingt, da Records keinen Standardkonstruktor haben.
Janni
2005 PE, 2009 PA, XE2 PA
  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 16:00 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