有没有人有想法,如何使用对原始数据的引用来使 TValue 生效?在我的序列化项目中,我使用了一个通用的序列化器(如 XML-Serialization 中所建议的),它将 TValues 存储在内部树结构中(类似于示例中的 MemberMap)。
这个成员树也应该被用来创建一个动态设置表单并操作数据。我的想法是为数据定义一个属性:
GetData和SetData方法的实现:
这个成员树也应该被用来创建一个动态设置表单并操作数据。我的想法是为数据定义一个属性:
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,所以我不想随时这样做。
也许有人有更好的建议?