从两天前开始,我开始从头开始制作我自己的简单类,源自TObject
,没什么特别的。我还需要在文件中写入/读取它们,所以经过一番搜索,因为我还没有学习序列化的所有细节,也没有完全掌握它们,所以我从这里借用了序列化方法。当我测试它时,它工作得很好。然后我添加了另一个类作为属性(这就是我说 sup-property 时所指的:类的属性,它是我的类中的一个属性......这很令人困惑,它需要一个正确的名称),遵循中的建议这个所以关于如何实际做到这一点的问题。现在写入文件似乎不会引发任何错误,然后我又不确定子属性是否正确写入或者它只是垃圾。然而,读回来确实会导致
带有消息“无效属性类型:TSomething”的异常类 EPropertyConvertError
由于我只是在学习这个,我不确定是什么问题。我确实有一些疯狂的猜测,其中之一是TSomething = Class
可能必须拥有自己的序列化方法?在那种情况下,这将如何运作(因为即使我不相信这个假设)?另一个是我从delphi.about.com借来的代码不能处理这些类型的属性?如果是这样,我该如何改进它?如果我的猜测都不是正确的,那么如何做到这一点呢?(而且我正在使用 DelphiXE2。)
根据要求编码:
TSomething = Class
protected
fNumber: integer;
fLine: string;
public
procedure Assign(Source: TObject);
published
property Number: integer read fNumber write fNumber;
property Line: string read fLine write fLine;
End;
TOther = Class
public
procedure LoadFromStream(const Stream: TMemoryStream);
procedure SaveToStream(const Stream: TMemoryStream);
constructor Create; virtual;
destructor Destroy; override;
protected
fSomething: TSomething;
procedure SetfSmth(AValue: TSomething);
published
property Something: TSomething read fSomething write SetfSomething;
end;
方法的实现是从上面提供的两个链接中借用的,我认为没有必要重新输入,除非要求。