Memo.Lines에서 추상 클래스 TStrings을 사용하는 이유는 무엇입니까? 왜 TStringList를 대신 사용하지 않습니까?왜 memo.Lines는 TStringList 대신 TString을 사용합니까?
그리고 TStringList로 변환해야합니까?
Memo.Lines에서 추상 클래스 TStrings을 사용하는 이유는 무엇입니까? 왜 TStringList를 대신 사용하지 않습니까?왜 memo.Lines는 TStringList 대신 TString을 사용합니까?
그리고 TStringList로 변환해야합니까?
TMemo.Lines
, TListBox.Items
, TComboBox.Items
등; 모두는 TStrings
으로 선언됩니다. 주의 재산에 대해 이야기하십시오! 내부 생성 유형은 각각 TMemoStrings
, TListBoxStrings
및 TComboBoxStrings
입니다.이 유형은 모두 TStrings
의 자손이며 저장 방법이 모두 다릅니다.
왜? 상호 호환성 및 상호 운용성을 위해. 그래서 모든 TStrings
-descendant 같은 특성을 가지고 있으며, 그래서 당신은 할 수 있습니다 :
Memo1.Lines := ListBox1.Items;
어떻게 사용할 수 있나요? 음, 과 같은 TStrings
속성은 정상적으로 작동합니다. 내부적으로이 모든 상호 작용을 구현하는 TMemoStrings
이기 때문에 속성에서 문자열 및 객체를 추가, 삭제, 변경, 갱신 및 지울 수 있습니다. Declaration <> 구현.
하지만 특별한 처리가 필요한 경우 (예 : TStringList
이 제공하는 정렬과 마찬가지로, 도움이 필요합니다. 당신은 캐스트도이 일이 아니기 때문에하는 TStringList
에 TMemo.Lines
변환, 대신이 특별한 처리를 위해 중간 객체를 생성 할 필요가 없습니다
var
Temp: TStringList;
begin
Temp := TStringList.Create;
try
Temp.Assign(Memo1.Lines);
Temp.Sort;
Memo1.Lines.Assign(Temp);
finally
Temp.Free;
end;
end;
는'TMemo.Lines는 TStringList를 = FALSE '입니다. 사실이 뒤에있는 실제 개체는 Windows API에 대한 래퍼입니다. 저장소는 TMemo를 구현하는 Windows EDIT 컨트롤에 의해 구성됩니다. "작업하기 전에 TStringList로 변환해야합니까?" 왜 그걸하고 싶니? –
TStrings는 개발자에게 더 큰 유연성을 허용하는 덜 "계약"입니다. TStrings 추상 클래스를 구현하는 모든 클래스와 상호 작용할 수 있습니다. – Simon