Ver Mensaje Individual
  #3  
Antiguo 25-02-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 29
Lepe Va por buen camino
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
   // aqui cambias el valor de la propiedad 1 y haces que se refleje
  // el cambio en el resto de propiedades que se vean afectadas
  Fpropiedad1 := Fpropiedad2 div 2;  // siguiendo el ejemplo.

   //  aquí usarías solo las variables privadas Fpropiedad1, Fpropiedad2 hasta 
  //   FPropiedad20 así evitas que se entre en recursión las asignaciones y te 
 //    quitas un poco de lío conceptual.
end;
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita