なぜMemo.Lines
抽象クラスを使用するのTStrings
ですか? TStringList
代わりに使用しないのはなぜですか?
そして、それを操作する前に変換する必要がTStringList
ありますか?
なぜMemo.Lines
抽象クラスを使用するのTStrings
ですか? TStringList
代わりに使用しないのはなぜですか?
そして、それを操作する前に変換する必要がTStringList
ありますか?
TMemo.Lines
、、、TListBox.Items
などTComboBox.Items
。すべてが として宣言されTStrings
ます。であるプロパティについて話すことに注意してください!内部で作成された型はそれぞれTMemoStrings
、TListBoxStrings
およびTComboBoxStrings
であり、これらはすべて の子孫でTStrings
あり、格納方法がすべて異なります。
なぜ?互換性と相互運用性のため。したがって、すべてTStrings
の -descendant には同じプロパティがあるため、次のことができます。
Memo1.Lines := ListBox1.Items;
使い方?まあ、次のTStrings
ようなプロパティはTMemo.Lines
問題なく機能します。プロパティの文字列 (およびオブジェクト) を追加、削除、変更、更新、クリアすることができます。内部的には、TMemoStrings
このすべての相互作用を実装するためです。宣言 <> 実装。
しかし、ソートなどの特別な処理TStringList
が必要な場合は、ヘルプが必要です。TMemo.Lines
a は 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;