Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

Record-Funktionen bei Const-Deklaration?

  Alt 1. Jun 2008, 11:30
Man kann ja nun in Recods Funktionen und Prozeduren einbauen
und innerhalb dieser Funktionen ist es möglich den Record-Inhalt zu ändern.

Was passiert eigentlich, wenn man soeine verändernte Funktion aufruft, obwohl die Record-Variable als Konstante definiert ist?


Oder ist es möglich festzulegen welche Record-Funktionen nicht verwendet werden dürfen, sobald der Record nicht als Variable definiert wurde?

Bzw. ist es möglich in soeiner Record-Funktion rauszubekommen, ob der Record als Konstante definiert ist?


gegeben ist z.B. diese Beispieldefinition:
Delphi-Quellcode:
type
  TMyRecord = Record
    Inhalt: Integer;
    Procedure MySet(x: Integer);
    Function MyGet: Integer;
  end;

Procedure TMyRecord.MySet(x: Integer);
  Begin
    Inhalt := x;
  End;

Function TMyRecord.MyGet: Integer;
  Begin
    Result := Inhalt;
  End;
Delphi-Quellcode:
Var A: TMyRecord;
Const B: TMyRecord = (Inhalt: (123));
// alternativ als Var- und Const-Parameter einer Prozedur

i := A.MyGet;
A.MySet(i);

i := B.MyGet;
B.MySet(i); // dieses dürfte ja nicht aufrufbar sein, da B nicht vernderbar ist
bei einem Test in Delphi 2006 hab ich bemerkt, daß die Konstante veränderbar ist
Delphi-Quellcode:
Type TMyRecord = Record
    Inhalt: Integer;
    Procedure MySet(x: Integer);
  end;

Procedure TMyRecord.MySet(x: Integer);
  Begin Inhalt := x; End;

Procedure TForm2.FormCreate(Sender: TObject);
  Var A: TMyRecord;
  Const B: TMyRecord = (Inhalt: (123));

  Begin
    A.MySet(456);
    B.MySet(456);

    If B.Inhalt = A.Inhalt Then Halt;
    // hier müßte B.Inhalt 123 sein, aber es ist 456
  End;
$2B or not $2B
  Mit Zitat antworten Zitat