TStringList后代,每个元素都有id和subid

时间:2012-08-22 10:02:19

标签: delphi data-structures delphi-xe

我需要创建一个TStringList类的后代,它具有与TstringList类相同的功能,但是对于列表中的每个字符串/对象都有一个id和subid元素。

继承TStringList类是否可行,或者我需要创建一个新类并实现我需要的行为。

LE:我还需要Objects属性,所以我不能在列表中存储指向结构的指针。

2 个答案:

答案 0 :(得分:2)

从检查TStringList类源,我认为可以通过添加另一个FListIDs: PStringItemListIDs(类似于FList: PStringItemList)来直接继承TStringList类,其中TStringItemIDs是一个记录FID, FSubID: Integer(假设数据类型为整数)。

接下来,您需要覆盖涉及TStringList的每个FList方法,即:AddClearDeleteInsert等。 ..您将处理FListIDs被添加或删除的位置。

最后使用getter和setter函数创建索引属性:IDSubID。 e.g:

property ID[Index: Integer]: Integer read GetID write SetID;
property SubID[Index: Integer]: Integer read GetSubID write SetSubID;

getter和setter函数将获取或设置FListIDs

答案 1 :(得分:0)

ID和SubID中的大数据是多少?

AFAIR TStrings可能有对象关联,而TObjects是一个32位指针,提供正确的类型转换,数据可以直接粘贴到它。

http://docwiki.embarcadero.com/Libraries/XE2/en/System.Classes.TStrings.Objects

或者您可以像指针一样使用它来记录{ID,SubID,TObject}。 或者你可以在它们的某些数组或列表中使用它作为索引,比如TList<记录ID,子ID,TObject结束>

然后你将覆盖新的TObject setter / getter以实际潜入该记录,并使用祖先的Objects geter / setter来保存索引或指针。

PS。也许TDictionary< TPair< ID,SubID>,TPair< String,TObject>>从头开始创建TStrings接口也很有用。