wp_xyz hat ja schon angedeutet, dass es zu Seiteneffekten kommen kann. Nehmen wir mal folgende Klasse:
Code: Alles auswählen
type
TMyClass = class(TObject)
private
FMyString: String;
FMyStringReadCount: Integer;
private
function GetMyString: String;
procedure SetMyString(AValue: String);
public
constructor Create;
public
property MyString: String read GetMyString write SetMyString;
property MyStringReadCount: Integer read FMyStringReadCount;
end;
function TMyClass.GetMyString: String;
begin
Inc(FMyStringReadCount);
Result := FMyString;
end;
procedure TMyClass.SetMyString(AValue: String);
begin
if FMyString = AValue then Exit;
FMyStringReadCount := 0;
FMyString := AValue;
end;
constructor TMyClass.Create;
begin
inherited Create;
FMyString := 'Test';
FMyStringReadCount := 0;
end;
Ich habe die Property
MyString die eine Zeichenkette enthält, sowie die Property
MyStringReadCount die angibt wie oft auf MyString lesend zugegriffen wurde (nach dem letzten Schreibzugriff).
Wenn ich jetzt also per Debugger auf MyString zugreife, wird sich auch dieser Wert ändern. Damit liefert der Debugger nicht nur eine Einsicht in den Zustand meines Systems, er verändert es. Im Grunde ist das dann
Schrödingers Katze. Ich verändere das System um seinen Zustand in Erfahrung zu bringen.
Und jetzt kommen wir zu der eigentlichen Frage:
Warum brauche ich überhaupt einen Debuggerzugriff auf eine Property?
Es fällt mir jetzt eigentlich kein sinnvoller Grund ein. Die Daten sind ja in irgendwelchen Feldern abgelegt, also muss ich auch nur diese Felder auswerten.