问题是 - 当动态数组被设置为类成员时,它们是如何由 Delphi 内部管理的?它们是通过引用复制还是传递?使用 Delphi 10.3.3。
该UpdateArray方法从数组中删除第一个元素。但是数组长度保持为 2。该UpdateArrayWithParam方法还会从数组中删除第一个元素。但是数组长度正确地减少到 1。
这是一个代码示例:
interface
type
TSomeRec = record
Name: string;
end;
TSomeRecArray = array of TSomeRec;
TSomeRecUpdate = class
Arr: TSomeRecArray;
procedure UpdateArray;
procedure UpdateArrayWithParam(var ParamArray: TSomeRecArray);
end;
implementation
procedure TSomeRecUpdate.UpdateArray;
begin
Delete(Arr, 0, 1);
end;
procedure TSomeRecUpdate.UpdateArrayWithParam(var ParamArray: TSomeRecArray);
begin
Delete(ParamArray, 0, 1);
end;
procedure Test;
var r: TSomeRec;
lArr: TSomeRecArray;
recUpdate: TSomeRecUpdate;
begin
lArr := [];
r.Name := 'abc';
lArr := lArr + [r];
r.Name := …Run Code Online (Sandbox Code Playgroud)