3

TstringList クラスと同じ機能を持つ TStringList クラスの子孫を作成する必要がありますが、リストの各文字列/オブジェクトには id 要素と subid 要素があります。

これは TStringList クラスを継承することで可能ですか、それとも新しいクラスを作成して必要な動作を実装する必要がありますか。

LE: Objects プロパティも必要なので、構造体へのポインターをリストに格納できません。

4

2 に答える 2

2

TStringList クラスのソースを調べると、 (データ型が Integer であると仮定して)のレコードである別のFListIDs: PStringItemListIDs( に似たFList: PStringItemList)を追加することで、TStringList クラスを直接継承できると思います。TStringItemIDsFID, FSubID: Integer

次に、、、、 などTStringListを含む各メソッドをオーバーライドする必要がありますFList。ここで、追加または削除を処理します。AddClearDeleteInsertFListIDs

最後に、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ます。

于 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 セッター/ゲッターをオーバーライドして実際にそのレコードに飛び込み、先祖のオブジェクトのゲッター/セッターを使用してインデックスまたはポインターを保持します。

PS。おそらく TDictionary<TPair<ID, SubID>, TPair< String, TObject>> は、TStrings インターフェイスをゼロから作成するのにも役立ちます。

于 2012-08-22T10:33:26.947 に答える