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;