Perché Memo.Lines utilizza la classe astratta TStrings? Perché non usa TStringList invece?Perché memo.Lines usa TStrings invece di TStringList?
E dovrei convertirlo in TStringList prima di utilizzarlo?
Perché Memo.Lines utilizza la classe astratta TStrings? Perché non usa TStringList invece?Perché memo.Lines usa TStrings invece di TStringList?
E dovrei convertirlo in TStringList prima di utilizzarlo?
TMemo.Lines
, TListBox.Items
, TComboBox.Items
, ecc .; tutti sono dichiarati come TStrings
. Attenzione, parlando della proprietà che è! I tipi creati internamente sono TMemoStrings
, TListBoxStrings
e TComboBoxStrings
rispettivamente, che sono tutti discendenti di TStrings
e differiscono tutti in modo di archiviazione.
E perché? Per intercambiabilità e interoperabilità. Così ogni TStrings
-descendant ha le stesse proprietà, e così si può fare:
Memo1.Lines := ListBox1.Items;
Come usare? Bene, una proprietà TStrings
come TMemo.Lines
funziona bene. È possibile aggiungere, eliminare, modificare, rinnovare e cancellare le stringhe (e gli oggetti) sulla proprietà, perché internamente è un TMemoStrings
che implementa tutta questa interazione. Dichiarazione <> implementazione.
Ma quando si desidera un trattamento speciale, ad es. come ordinare che fornisce TStringList
, quindi hai bisogno di aiuto. Non si può typecast né convertire un TMemo.Lines
ad un TStringList
, perché non è uno, ma invece è necessario creare un oggetto intermedio per questa elaborazione speciale:
var
Temp: TStringList;
begin
Temp := TStringList.Create;
try
Temp.Assign(Memo1.Lines);
Temp.Sort;
Memo1.Lines.Assign(Temp);
finally
Temp.Free;
end;
end;
Ok, grazie, ha senso. Quindi immagino per es. Memo.Lines.Delete (0) funziona perché non utilizza internamente TStrings? – Illiou
Sì. Quando si rilascia un componente memo nel modulo, non si verifica un errore del compilatore _abstract, supponiamo quindi che non sia stato creato un oggetto astratto. ;) – NGLN
Sicuramente c'è un modo semplice per ordinare sul posto. –
'TMemo.Lines è TStringList = FALSE. In effetti, l'oggetto reale dietro a questo è un wrapper attorno all'API di Windows. L'archiviazione è organizzata dal controllo EDIT di Windows che implementa 'TMemo'. "Devo convertirlo in TStringList prima di utilizzarlo?" No. Perché vorresti farlo? –
TStrings è un "contratto" minore che consente una maggiore flessibilità per lo sviluppatore. È possibile interagire con qualsiasi classe che implementa la classe astratta TStrings. – Simon