Чаще всего объекты нужны для того, чтобы хранить для каждого элемента дополнительную информацию. Например, в списке городов для каждого элемента можно дополнительно хранить население, площадь, административный статус и т. д. Для этого можно создать примерно такой класс:

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;

определяет, можно ли добавлять в список повторные значения. Тип


⇐ Предыдущая страница| |Следующая страница ⇒

Программирование в Delphi 7



Новости за месяц

  • Август
    2017
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс