Описание типов

Описание типов

Раздел описания типов начинается со служебного слова type, после которого следуют строки вида

имя типа = тип;
Например,

type
  arr10 = array [1..10] of integer;
  myint = integer;
  pinteger = ^integer;
  IntFunc = function(x: integer): integer;

Обычно описание используется для составных типов (статические массивы, процедурные переменные, записи, классы) чтобы дать имя сложному типу. Если для типа определена именная эквивалентность типов, это единственный способ передать переменные этого типа в подпрограмму.

Описание типов для классов использовать обязательно:

type
  A = class
    i: integer;
    constructor Create(ii: integer);
    begin
      i:=ii;
    end;
  end;

Если описание типа используется просто для того чтобы заменить одно имя на другое, то такие типы называются синонимами типов:

type
 
int = integer;
  double = real;

Описания типов могут быть обобщёнными, т.е. включать параметры-типы в угловых скобках после имени типа.

type
  Dict<K,V> = Dictionary<K,V>;
  Arr<T> = array of T;

Использование такого типа с конкретным параметром-типом называется инстанцированием типа:

var
  a: Arr<integer>;
  d: Dict<string,integer>;

При описании рекурсивных структур данных указатель на тип может фигурировать раньше описания самого типа в определении другого типа:

type
  PNode = ^TNode;
  TNode = record
    data: integer;
    next: PNode;
  end;

При этом важно, чтобы определения обоих типов находились в одном разделе type.

В отличие от Delphi Object Pascal следующее рекурсивное описание верно:

type
  TNode = record
    data: integer;
    next: ^TNode;
  end;

Отметим, что для ссылочных типов (классов) разрешается описание поля с типом, совпадающим с типом текущего класса:

type
  Node = class
    data: integer;
    next: Node;
  end;