我有一个类,它将通用的项目存储在数组中。这些项目通过默认的数组属性进行访问:
TMyList<TData> = class
private
items: array of TItem<TData>;
public
function get(position: integer): TData;
procedure edit(position: integer; data: TData);
property Values[position: integer]: TData read get write edit; default;
end;
implementation
function TMyList<TData>.get(position: integer): TData;
begin
result:= items[position];
end;
procedure TMyList<TData>.edit(position: integer; data: TData);
var
item: TItem<TData>;
begin
items[position]:= item;
end;
end;
在这种情况下,我存储的项目都是TTest类型,它也有自己的属性:
TTest = record
private
FTest: string;
procedure setFTest(const Value: string);
public
property Test: string read FTest write setFTest;
end;
implementation
procedure TColouredPoint.setFTest(const Value: String);
begin
FTest:= Value;
end;
end;
我希望能够像这样更改TTest实例的FTest值:
var
points: TMyList<TTest>;
...
points[index].Test:= 'test';
但是这样做没有任何效果。没有错误消息,但是points [index] .Test的值没有改变。
相反,我需要这样做:
var
points: TMyList<TTest>;
temp: TTest;
...
temp:= points[index];
temp.Test:= 'test';
points[index]:= temp;
为什么第一个版本不能正常工作?