Delphi-Quellcode:
class operator TThreadSafeInteger.Add(a: TThreadSafeInteger; b: Integer): Integer;
begin
a.Value := a.Value + b; // sinnlos, da hier nur eine Kopie von a verändert wird
// und kein anderer darauf zugreifen kann
result := a.Value; // lesezugriff
end;
class operator TThreadSafeInteger.Subtract(a: TThreadSafeInteger; b: Integer): Integer;
begin
a.Value := a.Value - b; // siehe add
result := a.Value; // lesezugriff
end;
class operator TThreadSafeInteger.Explicit(a: TThreadSafeInteger): Integer;
begin
result := a.Value; // Lesezugriffe brauchen hier nicht geschützt werden,
// da es die Schreibzugriffe schon ausreichend machen
end;
class operator TThreadSafeInteger.Implicit(a: TThreadSafeInteger): Integer;
begin
result, a.Value);
end;
class operator TThreadSafeInteger.Explicit(a: Integer): TThreadSafeInteger;
begin
result.Value := a; // sinnloas, da Result intern eh won keinem Anderem
// gesetzt werden kann und die externe Zuweisung ist vollkommen ungeschützt
end;
class operator TThreadSafeInteger.Implicit(a: Integer): TThreadSafeInteger;
begin
result.Value := a; // siehe vorher
end;
Fazit: hier ist garnichts geschützt, da alles nur intern abläuft und extern kein Schutz besteht.
Man benötigt vorallem bei den Schreibvorgängen direkten Zugriff auf die Variablen und das ist via Result nicht möglich.