3

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

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

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

4

2 回答 2

2

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

接下来,您需要覆盖TStringList涉及的每个方法,FList即:Add, Clear, Delete, Insert, 等...您将在其中处理FListIDs添加或删除。

最后创建索引属性:IDSubID带有 getter 和 setter 函数。例如:

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

getter 和 setter 函数将 get 或 set FListIDs

于 2012-08-22T10:33:18.677 回答
0

ID 和 SubID 中的数据有多大?

AFAIR TStrings 可能有关联的对象,并且 TObjects 是一个 32 位指针,提供适当的类型转换实现,数据可以直接粘贴到它。

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

或者您可以像使用指针一样使用它来记录 {ID, SubID, TObject}。或者您可以将它用作这些记录的某些数组或它们的列表中的索引,例如 TList< record ID, SubID, TObject end >

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

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

于 2012-08-22T10:33:26.947 回答