TStrings型とTStringList型


kuri  2004-02-11 16:55:01  No: 7057  IP: 192.*.*.*

いろいろ調べたのですが、
 TStrings型とTStringList型の違いがよくわかりません。
どうかご教授お願いいたします。

編集 削除
るるとん@K  2004-02-11 17:08:17  No: 7058  IP: 192.*.*.*

以下のようなメソッド、プロパティ、イベントがあります
Add,Delete,Clear,Count,onChange他

編集 削除
たかみちえ  URL  2004-02-11 17:58:40  No: 7059  IP: 192.*.*.*

TStringsは、ヘルプを見てわかるとおり、TStringsは抽象メソッド(とりあえず定義だけしてあって、実体がないメソッド)があります。それに実体をつけてあげたのが、TStringListクラスです。実際に使う際には、TStringListをつかうのが普通です。

  ではなぜTStringsなんてものがあるかというと、TStringListとはまた違う形で、
文字列リストクラスを作るときのためにあるのです。
  関数の引数としてTStringListを受け取りたいときは、TStrings型を要求しておいた方が、データ管理方式は同じだが、祖先が違うようなクラスを受け取れる可能性があるぶん、有利だと思います。
別に警告されることもありませんしね。
(まあ、入力補完機能がちょっと「ん?」ですが)

  っとまあ、こんな感じでいいでしょう。
詳しく知ってるわけではありませんから、ちょっと違うかもしれません。
よければどなたかにフォローをお願いしたいです。

編集 削除
jok  2004-02-11 21:31:32  No: 7060  IP: 192.*.*.*

> TStrings型とTStringList型の違いがよくわかりません。

たかみさんの説明でほぼ尽きていますが、TStrings は、「文字列リスト」全体の
基礎となる抽象クラスですから、実際のインスタンスを生成してつかうことはでき
ません。これから派生した具体クラスの共通の機能を表すために、存在します。
ですから、TMemo.Lines や TListBox.Items など、共通の機能で実際は異なった
具体クラスの場合のようにユーザがアクセスするとき便利なように TStrings 型
になっています。クラス型 OOP の「多態性」の一つです。

自分で「文字列リスト」を使うときは TStringList を使う必要があります。

編集 削除