В Delphi объекты - это специальные указатели, которые ссылаются на структуру данных в памяти кучи.Когда вы передаете объект в функцию, вы фактически передаете указатель, а не копию данных всего объекта.В этом случае при изменении поля или свойства с помощью этой ссылки это повлияет на исходные данные объекта.Вот простой пример, демонстрирующий это поведение:
program ObjParamTest;
type
TMyClass = class
private
FMyField : Integer;
public
property MyField : Integer read FMyField write FMyField;
end;
function ModifyObject(AnObj: TMyClass);
begin
AnObj.MyField := AnObj.MyField + 1;
end;
var
MyObj : TMyClass;
begin
MyObj := TMyClass.Create;
try
AnObj.MyField := 2;
Writeln(AnObj.MyField); // ==> Prints 2
ModifyObject(MyObj);
Writeln(AnObj.MyField); // ==> Prints 3
finally
MyObj.Free;
end;
end.
Также обратите внимание, что модификаторы параметров (например, Var, Const, Out) изменяют только способ передачи ссылки на объект в функцию и не влияют наисходная структура данных.
Может быть, эта статья прояснит вам различные способы передачи параметров в функции в Delphi для вас подробнее:
Различные модификаторы параметров функции в Delphi (архивная версия)