20

なぜMemo.Lines抽象クラスを使用するのTStringsですか? TStringList代わりに使用しないのはなぜですか?

そして、それを操作する前に変換する必要がTStringListありますか?

4

1 に答える 1

25

TMemo.Lines、、、TListBox.ItemsなどTComboBox.Items。すべてが として宣言されTStringsます。であるプロパティについて話すことに注意してください!内部で作成された型はそれぞれTMemoStringsTListBoxStringsおよびTComboBoxStringsであり、これらはすべて の子孫でTStringsあり、格納方法がすべて異なります。

なぜ?互換性と相互運用性のため。したがって、すべてTStringsの -descendant には同じプロパティがあるため、次のことができます。

Memo1.Lines := ListBox1.Items;

使い方?まあ、次のTStringsようなプロパティはTMemo.Lines問題なく機能します。プロパティの文字列 (およびオブジェクト) を追加、削除、変更、更新、クリアすることができます。内部的には、TMemoStringsこのすべての相互作用を実装するためです。宣言 <> 実装。

しかし、ソートなどの特別な処理TStringListが必要な場合は、ヘルプが必要です。TMemo.Linesa は a ではないため、 aを aに型キャストしたり変換したりすることはできませんTStringListが、代わりに、この特別な処理のために中間オブジェクトを作成する必要があります。

var
  Temp: TStringList;
begin
  Temp := TStringList.Create;
  try
    Temp.Assign(Memo1.Lines);
    Temp.Sort;
    Memo1.Lines.Assign(Temp);
  finally
    Temp.Free;
  end;
end;
于 2012-06-20T15:06:36.257 に答える