为什么memo.Lines使用TStrings而不是TStringList?

时间:2012-06-20 14:50:02

标签: delphi tstringlist memo

为什么Memo.Lines使用抽象类TStrings?为什么不使用TStringList

我应该在使用之前将其转换为TStringList吗?

1 个答案:

答案 0 :(得分:23)

TMemo.LinesTListBox.ItemsTComboBox.Items等;所有都被声明为TStrings。小心,谈论属性!内部创建的类型分别为TMemoStringsTListBoxStringsTComboBoxStrings,它们都是TStrings的后代,并且存储方式各不相同。

为什么?用于互换性和互操作性。因此,每个TStrings - 后代都具有相同的属性,因此您可以这样做:

Memo1.Lines := ListBox1.Items;

如何使用?好吧,像TStrings这样的TMemo.Lines属性就可以了。您可以添加,删除,更改,更新和清除属性上的字符串(和对象),因为在内部它是TMemoStrings,它实现了所有这些交互。声明<>实施

但是当你想要任何特殊处理时,例如像排序TStringList提供的那样,那么你需要帮助。您不能进行类型转换,也不能将TMemo.Lines转换为TStringList,因为它不是一个,而是需要为此特殊处理创建一个中间对象:

var
  Temp: TStringList;
begin
  Temp := TStringList.Create;
  try
    Temp.Assign(Memo1.Lines);
    Temp.Sort;
    Memo1.Lines.Assign(Temp);
  finally
    Temp.Free;
  end;
end;