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?