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
Class
Ключевое слово
Начинает объявление типа объектного класса unit
  
1 type Name = {packed} class
      Definitions...      
      {class function|procedure ...}
    end;
 
 2 type Name = class(BaseClass);
 
 3 type Name = class;
 
 4 type Name = {packed} class(BaseClass)
      Class definition...
    end;
 
 5 type Name = {packed} class(BaseClass {,Interfaces})
      Class definition...
    end;
 
 6 type MetaClassName = class of class type;
Описание
Ключевое слово Class это центральная часть Объектно-ориентированного кода.

Это определение содержит так называемые 'члены' - данные и методы (подпрограммы). Когда объект класса создан, он становится автономным элементом - вы можете обратиться к данным и методам объекта независимо от любого другого объекта. Оно похоже на запись Delphi, но с активными компонентами - методами.

Эти элементы определены в определении типов класса. Элементы метода осуществлены в разделе implementation модуля.

Объявление класса имеет следующее типичное описание :

type
  className = class(BaseClass)
  private
// Определения данных/методов локальные для этого модуля
  protected
// Определения данных/методов, локальных для этого класса + потомки
  public
// Определения данных/методов пригодных для использования всеми объектами этого класса
  published
// Внешне общественные определения
end;


Параметры можно передать при создании объектного образца класса. Они передаются методу Constructor класса. Слово Constructor используется вместо функции или метода. Вы можете иметь множество конструкторов для различных наборов параметра. Они снабжены ключевым словом overload; после конца определения конструктора.

Обычно, название метода конструктора - Create.

См. код для примера.

Когда объект разрушают, вызывают метод Destructor. Вы можете использовать его, чтобы предпринять специальное действие прежде, чем объектная память будет исправлена.

Обычно, название метода деструктора - Destroy.

Есть множество использований слова Class:

1. Определение класса базируется, по умолчанию на классе TObject. Все классы должны быть основаны на другом классе, с классом TObject, в самом верхнем уровне.

В пределах определений класса, Вы можете приставлять определения функции или процедуры с ключевым словом Class. Это позволяет подпрограмме быть вызванным из самого Класса в дополнение к объектному образцу класса. Поскольку класс - не реальный объект, он не имеет никакой памяти, распределенной для данных. Так что подпрограмма Класса должна работать бех ссылок на внутренние данные класса.

2. Определение класса базируются на указанном классе, но без местных добавлений или изменений. Вы имеете новый класс, который действует тождественно к классу BaseClass

3. Ускоренное объявление класса. Оно позволяет всем классам в модуле быть перечисленными в начале раздела type. Так что это вопрос удобства, а не чего-нибудь еще.

4. Определение класса базируется на указанном классе. Как 1-ый выше, но вы можете определить, на каком классе вы базируете ваш новый класс. Вашим классом будет смесь предка и местных объявлений.

5. Класс может содержать выполнение внешне предопределенных интерфейсов.

6. Ссылка metaclass позволяет переменной быть использованной для указания класса, а не объекта.
Примечания
Дополнительное ключевое слово packed говорит Delphi, чтобы он минимизировал память взятую классом. Это прекращает выравнивать данные относительно 2, 4-или 8-байтовых границ.
Похожие команды
Constructor  Определяет метод используемый для создания объекта из класса

Interface  Используется для внешних определений модуля, и как скелет класса

Object  Позволяет данным типа подпрограмм обращаться к методу объекта

Private  Начинает частный (Private) раздел данных и методов в классе

Property  Определяет управляемый доступ к полям класса

Protected  Начинает раздел класса частных данных доступных подклассам

Public  Начинает внешне доступный раздел класса

Published  Начинается изданный, внешне доступный раздел класса

TObject  Тип базового класса, который является предком для всех других классов

Virtual  Позволяет методу класса быть отменённым в производных классах

Dynamic  Позволяет методу класса быть заменённым в производных классах

 
Пример кода : Модуль с 2 определениями класса и кодом, который использует оба класса
// Полный код Модуля.
// -----------------------------------------------------------
// Вы должны поместить этот код в модуль с именем Unit1 и с формой
// названную Form1, которая имеет событие OnCreate названное FormCreate.

unit Unit1;

interface

uses
  SysUtils, Forms, Dialogs;

type
  // Определение классов в самом начале этого Модуля для ясности
  TForm1 = Class;          // Это опережающее определение класса

  TFruit = Class(TObject)  // Это фактическое определение класса :
    // Внутреннее определение полей класса - доступны только в этом модуле
    private
      isRound  : Boolean;
      length   : single;
      width    : single;
      diameter : single;
    // Поля и методы, доступные только для этого класса и потомков
    protected
    // Внешне доступные поля и методы
    public
      // 2 конструктора - один для круглого фрукта, другой для удлинённого фрукта (fruit)
      constructor Create(diameter : single);               overload;
      constructor Create(length : single; width : single); overload;
    // Внешне доступные и видимые поля и методы
    published
      // Обратите внимание, что свойства должны использовать разные имена для местных определений
      property round : Boolean
        read   isRound;
      property len   : single
        read   length;
      property wide  : single
        read   width;
      property diam  : single
        read   diameter;
  end;                    // Конец определения класса TFruit

  // Фактически, класс TForm1 теперь определен
  TForm1 = Class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure ShowFruit(fruit : TFruit);
  private
    // Нет локальных данных
  public
    // Используются только публичные определения предков класса TForm
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// Создание круглого объекта fruit
constructor TFruit.Create(diameter: single);
begin
  // Указываем, что мы имеем круглый fruit, и установка его размера
  isRound       := true;
  self.diameter := diameter;
end;

// Создание удлинённого объекта fruit
constructor TFruit.Create(length, width: single);
begin
  // Указываем, что мы имеем удлинённый fruit, и установка его размера
  isRound     := false;
  self.length := length;
  self.width  := width;
end;

// Объект формы - действие, предпринимаемое, когда форма создана
procedure TForm1.FormCreate(Sender: TObject);
var
  apple, banana : TFruit;
begin
  // Позволяет нам создавать наши fruit объекты
  apple  := TFruit.Create(3.5);
  banana := TFruit.Create(7.0, 1.75);

  // Показ подробностей о наших фруктах
  ShowFruit(apple);
  ShowFruit(banana);
end;

// Показ, каковы характеристики нашего плода
procedure TForm1.ShowFruit(fruit: TFruit);
begin
  if fruit.round
  then ShowMessage('Мы имеем круглый фрукт с диаметром = '+
                   FloatToStr(fruit.diam))
  else
  begin
    ShowMessage('Мы имеем удлинённый фрукт');
    ShowMessage('    его длина = '+FloatToStr(fruit.len));
    ShowMessage('    его ширина  = '+FloatToStr(fruit.wide));
  end;
end;

end.
Мы имеем круглый фрукт с диаметром = 3.5
Мы имеем удлинённый фрукт
его длина = 7
его ширина = 1.75
 


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



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





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


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