我需要創建一個TStringList類的後代,它具有與TstringList類相同的功能,但對於列表中的每個字符串/對象都有一個id和subid元素。帶有id和每個元素的subid的TStringList後代
這可能通過繼承TStringList類,或者我需要創建一個新的類並實現我需要的行爲。 LE:我還需要Objects屬性,所以我不能在列表中存儲指向結構的指針。
我需要創建一個TStringList類的後代,它具有與TstringList類相同的功能,但對於列表中的每個字符串/對象都有一個id和subid元素。帶有id和每個元素的subid的TStringList後代
這可能通過繼承TStringList類,或者我需要創建一個新的類並實現我需要的行爲。 LE:我還需要Objects屬性,所以我不能在列表中存儲指向結構的指針。
從檢查的TStringList類源,我認爲它是可以直接繼承的TStringList類,通過添加另一FListIDs: PStringItemListIDs
(類似於FList: PStringItemList
)其中TStringItemIDs
是FID, FSubID: Integer
(假設數據類型是整數)的記錄。
接下來,你需要重寫每個TStringList
方法涉及FList
即:Add
,Clear
,Delete
,Insert
等......在那裏你會處理FListIDs
被添加或刪除。
最後創建索引屬性:ID
,SubID
具有getter和setter函數。例如:
property ID[Index: Integer]: Integer read GetID write SetID;
property SubID[Index: Integer]: Integer read GetSubID write SetSubID;
獲取和設置函數將獲得或設置FListIDs
。
我做了一個'FID,FSubID,FStringListID'的記錄 - 雖然我們可能希望,如果以相同的方式準確初始化,字符串列表和額外數據列表將表現相同,但很難保證,especialyl有關可能未來的變化。 –
ID和SubID中的大數據量是多少?
AFAIR TString可能有對象關聯,並且TObjects是一個32位指針,它提供了適當的類型轉換,數據可以直接粘貼到它上面。
http://docwiki.embarcadero.com/Libraries/XE2/en/System.Classes.TStrings.Objects
或者你可以使用它像指針記錄{ID,子ID,TObject的}。 或者你可以在這些記錄或其中的列表中的一些陣列使用它作爲指標,像從TList <記錄ID,子ID,TObject的結束>
然後你會覆蓋新TObject的制定者/吸氣真正潛入該記錄,並使用祖先的Objects geter/setter來保存索引或指針。
PS。也許TDictionary < TPair < ID,SubID >,TPair < String,TObject > >也可以從頭開始創建TStrings接口。
您是否需要通過id和subid元素搜索字符串列表? –
是的,但爲此我可以做一個控制循環。 – RBA
回覆:您*可*重新使用繼承的對象屬性並提供新的GetObjects/SetObjects重新實現到外部:-) –