delphi - ¿Por qué memo.Lines usa TStrings en lugar de TStringList?
(1)
TMemo.Lines
, TListBox.Items
, TComboBox.Items
, etc .; Todos son declarados como TStrings
. ¡Cuidado, hablando de la propiedad que es! Los tipos creados internamente son TMemoStrings
, TListBoxStrings
y TComboBoxStrings
respectivamente, que son todos descendientes de TStrings
y difieren en el almacenamiento.
¿Y por qué? Para intercambiabilidad e interoperabilidad. Por lo tanto, cada TStrings
tiene las mismas propiedades, por lo que puede hacer:
Memo1.Lines := ListBox1.Items;
¿Cómo utilizar? Bueno, una propiedad de TMemo.Lines
como TMemo.Lines
funciona bien. Puede agregar, eliminar, cambiar, renovar y borrar las cadenas (y objetos) en la propiedad, ya que internamente es un TMemoStrings
que implementa toda esta interacción. Declaración <> implementación.
Pero cuando desea un manejo especial, por ejemplo, como la clasificación que proporciona TStringList
, necesita ayuda. No puede realizar una TMemo.Lines
a TMemo.Lines
ni convertir un TMemo.Lines
en un TStringList
, porque no es uno, sino que necesita crear un objeto intermedio para este procesamiento especial:
var
Temp: TStringList;
begin
Temp := TStringList.Create;
try
Temp.Assign(Memo1.Lines);
Temp.Sort;
Memo1.Lines.Assign(Temp);
finally
Temp.Free;
end;
end;
¿Por qué Memo.Lines
utiliza la clase abstracta TStrings
? ¿Por qué no usa TStringList
lugar?
¿Y debo convertirlo a TStringList
antes de trabajar con él?