2012-08-22 43 views
3

我需要創建一個TStringList類的後代,它具有與TstringList類相同的功能,但對於列表中的每個字符串/對象都有一個id和subid元素。帶有id和每個元素的subid的TStringList後代

這可能通過繼承TStringList類,或者我需要創建一個新的類並實現我需要的行爲。 LE:我還需要Objects屬性,所以我不能在列表中存儲指向結構的指針。

+1

您是否需要通過id和subid元素搜索字符串列表? –

+1

是的,但爲此我可以做一個控制循環。 – RBA

+1

回覆:您*可*重新使用繼承的對象屬性並提供新的GetObjects/SetObjects重新實現到外部:-) –

回答

2

從檢查的TStringList類源,我認爲它是可以直接繼承的TStringList類,通過添加另一FListIDs: PStringItemListIDs(類似於FList: PStringItemList)其中TStringItemIDsFID, FSubID: Integer(假設數據類型是整數)的記錄。

接下來,你需要重寫每個TStringList方法涉及FList即:AddClearDeleteInsert等......在那裏你會處理FListIDs被添加或刪除。

最後創建索引屬性:ID,SubID具有getter和setter函數。例如:

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

獲取和設置函數將獲得或設置FListIDs

+0

我做了一個'FID,FSubID,FStringListID'的記錄 - 雖然我們可能希望,如果以相同的方式準確初始化,字符串列表和額外數據列表將表現相同,但很難保證,especialyl有關可能未來的變化。 –

0

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接口。

+0

ID和SubId的數據類型是Integer。 – RBA

+1

這個解決方案的問題是我需要Objects屬性的行爲與以前一樣。所以我也需要對象列表。 – RBA

+0

我注意到它太晚了,但可以擴展到它。 你只需要重寫外部對象setter/getter,依靠內部繼承的方法來實現該機制。我更新了答案。 –

相關問題