好的关联,所以我有一个基类我们称之为TFruit
。从这个有喜欢TApple
,TOrange
等各种后裔。我需要将后代类的属性保存到一个文件中。需要唯一的整数值与类
为了能够在加载数据时创建正确的类,每个类都需要有一个我写入文件的ID
,然后再写入实际数据。目前,我想出了做这件事的方式如下:
type
TFruit = class
const ID = 0;
end;
TApple = class(TFruit)
const ID = 1;
end;
TOrange = class(TFruit)
const ID = 2;
end;
测试这一点,我发现我需要超级小心我宣布其类。如果我用这个:
var Fruit: TFruit;
Fruit := TOrange.Create;
...然后Fruit.ID
将返回零。然而,声明Fruit
作为TOrange
将产生预期的结果Fruit.ID = 2
(任何人都知道为什么吗?)
所以基本上,我是这样做的权利或是否有更好的方式来做到这一点?不必创建一个类的函数,并返回一个值从那里似乎被比较(额外的函数声明,执行和代码),非常难看。
为了方便起见,可以将一个类方法添加到返回该类的ID的注册对象的基类中。而且由于类方法(不像C#样式的静态方法)接收类型为`self`参数,所以它按预期工作。 – CodesInChaos 2010-11-30 19:33:33
@CodeInChaos,true,但是这会要求每个类“知道”它是可以避免的ID,并且在试图找出下一个可用ID是什么时可能会创建新的后代。 – 2010-11-30 19:38:03