我需要创建一个TStringList类的后代,它具有与TstringList类相同的功能,但是对于列表中的每个字符串/对象都有一个id和subid元素。
继承TStringList类是否可行,或者我需要创建一个新类并实现我需要的行为。
LE:我还需要Objects属性,所以我不能在列表中存储指向结构的指针。
答案 0 :(得分:2)
从检查TStringList类源,我认为可以通过添加另一个FListIDs: PStringItemListIDs
(类似于FList: PStringItemList
)来直接继承TStringList类,其中TStringItemIDs
是一个记录FID, FSubID: Integer
(假设数据类型为整数)。
接下来,您需要覆盖涉及TStringList
的每个FList
方法,即:Add
,Clear
,Delete
,Insert
等。 ..您将处理FListIDs
被添加或删除的位置。
最后使用getter和setter函数创建索引属性:ID
,SubID
。 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接口也很有用。