TstringList クラスと同じ機能を持つ TStringList クラスの子孫を作成する必要がありますが、リストの各文字列/オブジェクトには id 要素と subid 要素があります。
これは TStringList クラスを継承することで可能ですか、それとも新しいクラスを作成して必要な動作を実装する必要がありますか。
LE: Objects プロパティも必要なので、構造体へのポインターをリストに格納できません。
TstringList クラスと同じ機能を持つ TStringList クラスの子孫を作成する必要がありますが、リストの各文字列/オブジェクトには id 要素と subid 要素があります。
これは TStringList クラスを継承することで可能ですか、それとも新しいクラスを作成して必要な動作を実装する必要がありますか。
LE: Objects プロパティも必要なので、構造体へのポインターをリストに格納できません。
TStringList クラスのソースを調べると、 (データ型が Integer であると仮定して)のレコードである別のFListIDs: PStringItemListIDs
( に似たFList: PStringItemList
)を追加することで、TStringList クラスを直接継承できると思います。TStringItemIDs
FID, FSubID: Integer
次に、、、、 などTStringList
を含む各メソッドをオーバーライドする必要がありますFList
。ここで、追加または削除を処理します。Add
Clear
Delete
Insert
FListIDs
最後に、getter 関数と setter 関数を使用してID
、インデックス プロパティを作成します。SubID
例えば:
property ID[Index: Integer]: Integer read GetID write SetID;
property SubID[Index: Integer]: Integer read GetSubID write SetSubID;
getter および setter 関数は get または set しFListIDs
ます。
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 セッター/ゲッターをオーバーライドして実際にそのレコードに飛び込み、先祖のオブジェクトのゲッター/セッターを使用してインデックスまたはポインターを保持します。
PS。おそらく TDictionary<TPair<ID, SubID>, TPair< String, TObject>> は、TStrings インターフェイスをゼロから作成するのにも役立ちます。