Свойства, наследуемые от класса tList
property Capacity: Integer;
Определяет размер массива, в котором хранятся объекты. Если при добавлении нового элемента окажется, что список заполнен, то Capacity будет увеличено.
property Count: Integer;
Показывает, сколько элементов списка используется в данный момент. Если увеличить значение Count, то в список будут добавлены пустые указатели (nil). При его уменьшении будет удалено необходимое число записей.
property List: PPointerList;
Определяет массив указателей, которые составляют элементы массива. Используется для того, чтобы получить прямой доступ к элементам массива.
Практическая часть
Пример консольного приложения с использованием класса TObjectList
Модуль
unit MyClasses;
interface
uses
SysUtils, Contnrs, Classes;
////////////////////////////////////////////////////////////////////////////////
// Типы String20 и String10 необходимы для согласования типов полей класса
// TMyObject, типов свойств класса TMyObject и типов полей записи Rec
////////////////////////////////////////////////////////////////////////////////
type
String20 = string[20];
String10 = string[10];
////////////////////////////////////////////////////////////////////////////////
// Объявление класса объекта, из экземпляров которого будет состоять список
// Класс TMyObject наследует все поля, свойства и методы базового класса TObject
////////////////////////////////////////////////////////////////////////////////
type
TMyObject = class (TObject)
private
FName: String20;
FAge: Integer;
FGroup: String10;
public
property Name: String20 read FName;
property Age: Integer read FAge;
property Group: String10 read FGroup;
constructor Create; overload;
constructor Create(Name: string; Age: Integer; Group: string); overload;
procedure Read; virtual;
procedure Print; virtual;
end;
////////////////////////////////////////////////////////////////////////////////
// Обявления класса списка
// Класс TMyObjectList наследует все поля, свойства и методы базового класса
// TObjectList
////////////////////////////////////////////////////////////////////////////////
type
TMyObjectList = class (TObjectList)
public
procedure Print;
procedure AddAtHead(AObject: TObject);
procedure DelFromHead;
procedure AddAtTail(AObject: TObject);
procedure DelFromTail;
end;
implementation
////////////////////////////////////////////////////////////////////////////////
// Реализация первого конструктора класса TMyObject
////////////////////////////////////////////////////////////////////////////////
constructor TMyObject.Create;
begin
inherited Create; // Вызывается одноименный конструктор базового класса
end;
////////////////////////////////////////////////////////////////////////////////
// Реализация второго конструктора присваивания класса TMyObject
////////////////////////////////////////////////////////////////////////////////
constructor TMyObject.Create(Name: string; Age: Integer; Group: string);
begin
inherited Create; // Вызывается одноименный конструктор базового класса
Self.FName := Name;
Self.FAge := Age;
Self.FGroup := Group;
end;
////////////////////////////////////////////////////////////////////////////////
// Реализация метода чтения с консоли полей класса TMyObject
////////////////////////////////////////////////////////////////////////////////
procedure TMyObject.Read;
begin
Write('Enter Name: '); Readln(FName);
Write('Enter Age: '); Readln(FAge);
Write('Enter Group: '); Readln(FGroup);
end;
////////////////////////////////////////////////////////////////////////////////
// Реализация метода вывода на консоль полей класса TMyObject
////////////////////////////////////////////////////////////////////////////////
procedure TMyObject.Print;
begin
Writeln(FName: 25, FAge: 10, FGroup: 15);
end;
////////////////////////////////////////////////////////////////////////////////
// Реализация метода вывода на консоль элементов списка класса TMyObject
////////////////////////////////////////////////////////////////////////////////
procedure TMyObjectList.Print;
var
I: Integer;
begin
for I := 0 to Count-1 do
TMyobject(Items[I]).Print;
end;
////////////////////////////////////////////////////////////////////////////////
// Добавить элемент в начало списка
////////////////////////////////////////////////////////////////////////////////
procedure TMyObjectList.AddAtHead(AObject: TObject);
begin
Insert(0, AObject);
end;
////////////////////////////////////////////////////////////////////////////////
// Добавить элемент в конец списка
////////////////////////////////////////////////////////////////////////////////
procedure TMyObjectList.AddAtTail(AObject: TObject);
begin
Add(AObject);
end;
////////////////////////////////////////////////////////////////////////////////
// Удалить элемент с начала списка
////////////////////////////////////////////////////////////////////////////////
procedure TMyObjectList.DelFromHead;
begin
if Count > 0 then Delete(0);
end;
////////////////////////////////////////////////////////////////////////////////
// Удалить элемент с конца списка
////////////////////////////////////////////////////////////////////////////////
procedure TMyObjectList.DelFromTail;
begin
if Count > 0 then Delete(Count-1);
end;
end.