Delphi справочник - Форум программистов - Навигация  
 A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z      По первой букве  
System     SysUtils     StrUtils     DateUtils     FileCtrl     ConvUtils     StdConvs     Math     Classes     Dialogs     Types     Variants    ПО Unit   Compiler directives     Directives     Keywords     Types     Variables     Constants     Functions     Procedures    По категории  

форум программистов

Основы Delphi
Constructor
Ключевое слово
Определяет метод используемый для создания объекта из класса 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 плюс версию, где родительский конструктор имеет параметры.
Похожие команды
Class  Начинает объявление типа объектного класса

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
 


Оплата за обучение в Kata Academy только после твоего трудоустройства в IT, начни карьеру Middle Java-разработчика



Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки? Slurm подготовили для вас особенный продукт!





форум программистов


© Форум Delphi  |  Форум Pascal   |  Блог программистов   |  Исходники Delphi   |  Автор сайта  |  Ссылки   |  Английская версия