Como bien dices hay que tener cuidado.
Si tienes un método "SetPropiedad2" es porque haces algo más que cambiar el valor a FPropiedad2. Si cambias el valor a Fpropiedad1 por la cara, te queda el resto de código sin sincronizar.
Cuando al cambiar una propiedad en el método Set afecta a otras propiedades y no puedes usar "Propiedad1 := Fpropiedad2 div 2" porque entra en recursión las asignaciones, hay que crear un método aparte:
Código Delphi
[-]
miclase = class
private
fpropiedad1: integer;
fpropiedad2: integer;
procedure SetPropiedad1(const Value: integer);
procedure SetPropiedad2(const Value: integer);
procedure DoCambioPropiedad1;
public
property Propiedad1: integer read fpropiedad1 write SetPropiedad1;
property Propiedad2: integer read fpropiedad2 write SetPropiedad2;
end;
implementation
procedure SetPropiedad2(value: integer);
begin
if Value <> FPropiedad2
then begin
FPropiedad2 := Value;
DoCambioPropiedad1;
end;
end;
procedure DoCambioPropiedad1;
begin
Fpropiedad1 := Fpropiedad2 div 2;
end;