Ver Mensaje Individual
  #6  
Antiguo 13-05-2010
Avatar de Lord Delfos
Lord Delfos Lord Delfos is offline
Miembro
 
Registrado: ene 2008
Ubicación: Tandil, Argentina
Posts: 558
Reputación: 17
Lord Delfos Va por buen camino
Cita:
Empezado por yapt Ver Mensaje
A que te refieres con la propiedad IZQUIERDO ?
Eh... Quise decir cuando la propiedad es llamada del lado izquierdo de una asignación. Que es cuando se llama al gettter y no al setter (el GetHijo, vamos).

Cita:
Empezado por yapt Ver Mensaje
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  HolaHola : TRecHijo;
begin
  Padre.Hijo[1] := HolaHola;  //<<<<----- Esto de aquí... ???
end;

Porque tambien Padre.Hijo[1] llaman al GetHijo, no ?
A ver, a ver. Según entiendo yo.

Código Delphi [-]
Padre.Hijo[1]:= AlgunRegistro;

Sería:

Código Delphi [-]
Temporal:= Padre.FHijo[1];
Temporal:= AlgunRegistro;
Padre.FHijo[1]:= Temporal;

Ahora:

Código Delphi [-]
Padre.Hijo[1].campo1:= 'Hola';

Sería:
Código Delphi [-]
Temporal:= Padre.FHijo[1];
Temporal2:= Temporal.campo1;
Temporal2:= 'Hola';
Padre.FHijo[1]:= Temporal;

¡Ajá! Pero si asignamos Temporal (no Temporal2) a FHijo[1], entonces perdemos la asignación a campo1. ¿no?

Por eso, el compilador se niega a aceptar hacer tal cosa. En otros lenguajes, como C#, esto está permitido, aunque el valor NO es asignado. Es decir, pasa lo mismo que en el ejemplo de arriba.

Porqué motivo el compilador no hace Padre.FHijo[1].campo1:= Temporal2, te preguntarás. Pues porque la propiedad de clase devuelve un registro, no un string. Es decir, el GetHijo devuelve todo un registro, una copia del original, y sobre esa copia vos querés cambiar el valor. Recordemos que la propiedad trata sobre un registro, así que el SetHijo supone que le vas a pasar todo el registro, no solamente un campo...

En tu ejemplo en el que asignás un registro completo, ahí no hay problemas porque, precisamente, la propiedad trabaja con un registro, así la definiste vos. No sé si se entiende...

O al menos eso es lo que yo entiendo.

Última edición por Lord Delfos fecha: 13-05-2010 a las 21:03:19.
Responder Con Cita