gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 14:34:39 26 4
gpt4 key购买 nike

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

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

最佳答案

TMemo.LinesTListBox.ItemsTComboBox.Items等;全部都声明为 TStrings。当心,谈论的是属性(property)!内部创建的类型分别是 TMemoStringsTListBoxStringsTComboBoxStrings,它们都是 TStrings 的后代,并且不同之处在于存储方式。

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

Memo1.Lines := ListBox1.Items;

如何使用?好吧,像 TMemo.Lines 这样的 TStrings 属性就可以很好地工作。您可以添加、删除、更改、更新和清除属性上的字符串(和对象),因为它在内部是一个实现所有这些交互的 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;

关于delphi - 为什么 memo.Lines 使用 TStrings 而不是 TStringList?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11122197/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com