Delphi-Help

Constructor

Печать
Рейтинг пользователей: / 3
ХудшийЛучший 

Constructor

Описание

Ключевое слово Constructor определяет процедуру Name конструктора для класса.
При создании объекта, вы вызываете метод Constructor класса, а не объекта:
objectName := ClassName.Create(parms);
Название (Name) для конструктора, обычно Create, но оно этим не ограничено. Однока, будет мудро сохранить это название.
Объект может быть создан с или без параметров (см. пример).
Конструкторы могут быть определены в public или published разделах определения класса.
Вы можете иметь множество конструкторов, но при этом, вы можете определить только один из них как Published. При многочисленных конструкторах, к каждому должна быть прибавлена директива Overload.
При осуществлении процедуры конструктора, обычно называемой Create, вы должны вызвать родительского конструктора и сделать это привычкой, например
constructor Create;
inherited;
...
Это гарантирует, что конечный объект безопасно проиллюстрирует образец этого родительского класса, даже если родитель TObject, который не делает ничего в его конструкторе. Код примера иллюстрирует это простое разнообразие Inherited плюс версию, где родительский конструктор имеет параметры.

Пример кода

// Полный код Модуля.
// -----------------------------------------------------------
// Вы должны поместить этот код в модуль с именем 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

Примечание

Авторизация



Счетчики