Cita:
Empezado por ecfisa
Básicamente, cuando el argumento es pasado por valor, la función hace una copia local del mismo y trabaja sobre el, por lo tanto no se altera el contenido del objeto enviado
|
Es distinto C++ Builder a Delphi en este sentido?
Me costo sus dolores de c... pero creia que al fin lo habia entendido, de la forma mas bruta (experimentando)
Cuando se pasa un
objeto siempre se pasa una referencia. Asi sea que le pongamos const, var o nada (notacion Object Pascal). Es decir estos 3 alteran el contenido del Caption de un TLabel
Código Delphi
[-]
procedure Foo(const ALabel: TLabel);
begin
ALabel.Caption := 'Hola';
end;
procedure Foo(ALabel: TLabel);
begin
ALabel.Caption := 'Hola';
end;
procedure Foo(var ALabel: TLabel);
begin
ALabel.Caption := 'Hola';
end;
Basicamente lo que se prohibe al usar
const es el operador de asignacion ( := ). El resto no hay problema.
Es decir, por ejemplo una llamada FreeAndNil(ALabel) daria error de compilacion, ya que estaria asignando algo (NIL). Pero tranquilametne podria hacer un ALabel.Free
Distinto es el caso de los primitivos (integers, strings, booleans) que si funciona como indicas