Ver Mensaje Individual
  #7  
Antiguo 07-09-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Reputación: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Cita:
Empezado por ecfisa Ver Mensaje
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
Responder Con Cita