Определяет метод используемый для создания объекта из класса
unit
1 type Class declaration ... Constructor Name; {Overload;} ... end; 2 type Class declaration ... Constructor Name(Arguments); {Overload;} ... end;
Описание
Ключевое слово Constructor определяет процедуру Name конструктора для класса.
При создании объекта, вы вызываете метод Constructor класса, а не объекта:
objectName := ClassName.Create(parms);
Название (Name) для конструктора, обычно Create, но оно этим не ограничено. Однока, будет мудро сохранить это название.
Объект может быть создан с или без параметров (см. пример).
Конструкторы могут быть определены в public или published разделах определения класса.
Вы можете иметь множество конструкторов, но при этом, вы можете определить только один из них как Published. При многочисленных конструкторах, к каждому должна быть прибавлена директива Overload.
При осуществлении процедуры конструктора, обычно называемой Create, вы должны вызвать родительского конструктора и сделать это привычкой, например
constructor Create;
inherited;
...
Это гарантирует, что конечный объект безопасно проиллюстрирует образец этого родительского класса, даже если родитель TObject, который не делает ничего в его конструкторе. Код примера иллюстрирует это простое разнообразие Inherited плюс версию, где родительский конструктор имеет параметры.
Destructor Определяет метод используемый для уничтожения объекта
Function Определяет подпрограмму, которая возвращает значение
Inherited Используется для вызова родительского класса конструктора или метода деструктора
Object Позволяет данным типа подпрограмм обращаться к методу объекта
Procedure Определяет подпрограмму, которая не возвращает значение
TObject Тип базового класса, который является предком для всех других классов
Пример кода : Примеры конструкторов с параметрами и без параметров
// Полный код Модуля. // ----------------------------------------------------------- // Вы должны поместить этот код в модуль с именем Unit1 и
с формой // названную Form1, которая имеет событие OnCreate названное FormCreate.
unit Unit1;
interface
uses Forms, Dialogs, Classes, Controls, StdCtrls;
type // Определение
родительского класса основанного, по умолчанию, на TObject TFruit = class public name : string; Constructor Create; overload;
// Этот конструктор использует умолчания Constructor Create(name : string); overload; end;
// Определение типа потомка TApple = class(TFruit) public diameter : Integer; published Constructor Create(name : string; diameter : Integer); end;
// Класс формы используемой этим
модулем TForm1 = class(TForm) procedure FormCreate(Sender: TObject); end;
var Form1: TForm1;
implementation {$R *.dfm} // Вложение определений формы
// Создание объекта fruit - версия без параметров constructor TFruit.Create; begin // Сначала выполняется
родительский конструктор (TObject) inherited; //
Вызов родительского метода Create
// Теперь устанавливаем имя fruit, по умолчанию self.name := 'Fruit'; end;
// Создание объекта fruit - версия
с параметрами constructor TFruit.Create(name: string); begin //
Не cможет выполниться родительский конструктор - параметры отличаются
// И сохраняем имя fruit self.name := name; end;
// Создание объекта apple constructor TApple.Create(name: string; diameter : Integer); begin //
Сначала выполняется родительский конструктор (TFruit) inherited Create(name); //
Вызов родительского метода
// Теперь сохраняем переданный apple диаметр self.diameter := diameter; end;
// Основная линия кода procedure TForm1.FormCreate(Sender: TObject); var fruit : TFruit; banana : TFruit; apple : TApple;
begin // Создание 3-х
различных объектов fruit fruit := TFruit.Create; banana := TFruit.Create('Banana'); apple := TApple.Create('Pink Lady', 12);
// Смотрим какие из наших объектов
являются fruit if fruit Is TFruit then ShowMessage(fruit.name +'
- fruit'); if banana Is TFruit then ShowMessage(banana.name +' - fruit'); if apple Is TFruit then ShowMessage(apple.name +'
- fruit');
// Смотрим какие объекты являются apple if fruit Is TApple then ShowMessage(fruit.name +'
- apple'); if banana Is TApple then ShowMessage(banana.name +'
- apple'); if apple Is TApple then ShowMessage(apple.name +'
- apple'); end; end.
Fruit - fruit
Banana - fruit
Pink Lady - fruit
Pink Lady - apple