Чаще всего объекты нужны для того, чтобы хранить для каждого элемента дополнительную информацию. Например, в списке городов для каждого элемента можно дополнительно хранить население, площадь, административный статус и т. д. Для этого можно создать примерно такой класс:
TCityProps = class (TOoject) Square: Longlnt;
Population: Longlnt;
Status: String;
end;
Для того чтобы добавить к строке из списка объект, используется метод AddObjecf.
function AddObject(const S: string;
AObject: TObject): Integer;
virtual;
Обратите внимание, что в параметре AObject необходимо передавать указатель на объект. Проще всего это сделать таким образом:
SomeStrings.AddObject('Someltem', TCityProps.Create);
Или же так:
var SPb: TCityProps;
SPb := TCityProps.Create;
{Создание объекта} SPb.Population := 5000000;
SomeStrings.Strings[i] := 'Санкт-Петербург';
SomeStrings.Objects[i] := SPb; (Связывание объекта и строки)
Можно поступить и подобным образом (помните, что строка уже должна существовать):
SomeStrings.Strings[i] := 'Санкт-Петербург';
SomeStrings.Objects[i] := TCityProps.Create;
(SomeStrings.Objects[i] as TCityProps).Population := 5000000;
Аналогично методу insert, элемент и связанный с ним объект можно вставить в произвольное место списка методом
procedure InsertObject (Index: Integer;
const S: string;
AObject: TObject);
При перемещении методом Move вместе с элементом переносится и указатель на связанный объект.
Обратите внимание на две особенности, связанные с удалением указателей на объекты и самих связанных объектов.
При удалении элемента списка удаляется только указатель на объект, а сам объект остается в памяти. Для его уничтожения следует предпринять дополнительные усилия:
for i : = 0 to SomeList.Count - 1 do SomeList.Objects[i].Destroy;
Если при удалении связанного объекта необходимо выполнить некоторые действия, предусмотренные в деструкторе, приведение типов
TCityProps(SomeList.Objects[i]).Destroy;
выполнять не обязательно - нужный деструктор будет вызван автоматически, хотя в данном случае приведение типов ошибкой не является.
Метод
procedure Clear;
override;
полностью очищает список, удаляя все его элементы.
Помимо перечисленных, класс TStringList обладает рядом дополнительных свойств и методов. Вспомогательные свойства класса обеспечивают разработчика информацией о состоянии списка. Дополнительные методы осуществляют поиск в списке и взаимодействие с файлами и потоками.
Свойство только для чтения
property Count: Integer; возвращает число элементов списка.
Так как основу списка составляет динамический массив, то для него в процессе работы должна выделяться память. При добавлении в список новой строки память для нее выделяется автоматически. Свойство
property Capacity: Integer;
определяет число строк, для которых выделена память. Вы можете самостоятельно управлять этим параметром, помня при этом, что значение Capacity всегда должно быть больше или равно значению Count.
Свойство
property Duplicates: TDuplicates;
определяет, можно ли добавлять в список повторные значения. Тип