Soweit es so gewünscht ist, kann man den Wert ja auch der Methode einfach übergeben:
Delphi-Quellcode:
type
TKlasse = class;
IVisitor = interface
procedure Visit(const x: TKlasse; const v: Integer);
end;
TKlasse = class
protected
FWert: Integer;
public
procedure Add(const vis: IVisitor; const val: Integer);
property Wert: Integer read FWert write FWert;
end;
TVisitor = class(TInterfacedObject, IVisitor)
procedure Visit(const x: TKlasse; const v: Integer);
end;
procedure TKlasse.Add(const vis: IVisitor; const val: Integer);
begin
vis.Visit(self,val);
end;
procedure TVisitor.Visit(const x: TKlasse; const val: Integer);
begin
x.Wert := x.Wert + val;
end;