有谁知道,我如何使用对原始数据的引用来制作 TValue ?在我的序列化项目中,我使用(如XML-Serialization中所建议的)一个通用序列化程序,它将 TValues 存储在内部树结构中(类似于示例中的 MemberMap)。
此成员树还应该用于创建动态设置表单和操作数据。我的想法是为数据定义一个属性:
TDataModel <T> = class
{...}
private
FData : TValue;
function GetData : T;
procedure SetData (Value : T);
public
property Data : T read GetData write SetData;
end;
GetData、SetData 方法的实现:
procedure TDataModel <T>.SetData (Value : T);
begin
FData := TValue.From <T> (Value);
end;
procedure TDataModel <T>.GetData : T;
begin
Result := FData.AsType <T>;
end;
不幸的是,TValue.From 方法总是复制原始数据。因此,每当应用程序更改数据时,DataModel 都不会更新,反之亦然,如果我以动态形式更改 DataModel,原始数据不会受到影响。当然,我总是可以在更改任何内容之前和之后使用 Data 属性,但是由于我在 DataModel 中使用了很多 Rtti,我真的不想在任何时候这样做。
也许有人有更好的建议?