Конструкторы
Объекты создаются с помощью специальных методов, называемых конструкторами.
Конструктор представляет собой функцию, создающую объект в
динамической памяти, инициализирующую его поля и возвращающую указатель на
созданный объект. Этот указатель обычно сразу присваивается переменной
типа класс. При описании конструктора вместо служебного слова
function
используется служебное слово
constructor
. Кроме того, для конструктора не
указывается тип возвращаемого значения.
Например:
type Person = class
private
nm: string;
ag: integer;
public
constructor Create(name: string; age: integer);
end;
...
constructor Person.Create(name: string; age: integer);
begin
nm := name;
ag := age;
end;
В PascalABC.NET конструктор
всегда должен иметь имя Create
. При описании
конструктора внутри класса можно опускать его имя:
type
Person = class
constructor (name: string; age: integer);
begin
nm := name;
ag := age;
end;
end;
В силу особенностей реализации вызовов конструкторов в .NET в PascalABC.NET всегда создается конструктор без параметров (независимо от того, определен ли другой конструктор). Этот конструктор инициализирует все поля нулевыми значениями (строковые поля - пустыми строками, логические - значением False).
Для вызова конструктора можно использовать два способа.
1 способ. В стиле Object Pascal.
Для вызова конструктора следует указать имя класса, за которым следует точка-разделитель, имя конструктора и список параметров. Например:
var p: Person;
p := Person.Create('Иванов',20);
2 способ. С помощью операции new
- в
стиле C# (предпочтительный).
var p: Person;
p := new Person('Иванов',20);
Деструктор в Object Pascal -
специальная процедура, уничтожающая объект и
освобождающая динамическую память, которую этот объект
занимал. При описании деструктора вместо служебного слова procedure
используется служебное слово destructor
.
Например:
destructor Destroy;
begin
...
end;
Поскольку в PascalABC.NET память управляется сборщиком мусора, деструктор в PascalABC.NET не играет никакой роли и представляет собой обычную процедуру-метод.