Экземплярные конструкторы

Экземплярный конструктор - это метод класса, который реализует действия необходимые для инициализации экземпляра класса.

constructor-declaration:

attributesopt  constructor-modifiersopt  constructor-declarator  constructor-body

constructor-modifiers:

constructor-modifier

constructor-modifiers   constructor-modifier

constructor-modifier:

Public

Protected

Friend

Private

constructor-declarator:

Constructor constructor-name (  formal-parameter-listopt  )  constructor_initializeropt ;

constructor_initializeropt

: Inherited constructor-name (  argument-listopt  )

: constructor-name  (  argument-listopt  )

constructor-body:

method-localsopt Begin   method-body   End Constructor   constructor-nameopt   ;

constructor-name:

identifier

Определение экземплярного конструктора может содержать список параметров, к которому применяются те же правила, что и к списку параметров метода. Список параметров экземплярного конструктора определяет его сигнатуру. Каждый из типов, используемых в списке параметров, должен иметь уровень доступа не ниже чем уровень доступа самого конструктора.

Экземплярные конструкторы не наследуются производными классами. Соответственно класс не имеет никаких других конструкторов кроме тех, что в нем описаны. Использование ключевого слова Inherited в заголовке конструктора приведет к вызову указанного конструктора базового класса при создании объекта производного класса. Если ключевое слово Inherited не указано, то можно указать один из конструкторов текущего класса.

Если класс не содержит ни одного определения экземплярного конструктора, то для него автоматически генерируется экземплярный конструктор по умолчанию.

Конструктор по умолчанию

Конструктор по умолчанию генерируется автоматически компилятором для класса, если его определение не содержит определений экземплярных конструкторов. Данный конструктор просто вызывает экземплярный конструктор без параметров родительского класса. Если родительский класс не имеет экземплярного конструктора без параметров, то возникает ошибка компиляции. Уровень доступа конструктора по умолчанию определен как родовой для абстрактных классов и как открытый для всех остальных.

Пример

Class A
    //Конструктор по умолчанию
    Public Constructor Create();
    Begin
        
    End Constructor;
    
    //Конструктор с параметром
    Public Constructor Create(i: integer);
    Begin
        
    End Constructor;
    
    //Дополнительный конструктор с параметрами
    //При инициализации будет вызван конструктор по умолчанию
    Public Constructor CreateEx(i: integer; j: double): Create();
    Begin
        
    End Constructor;
End Class;

Class B: A
    //Конструктор по умолчанию
    //При инициализации будет вызван конструктор базового класса CreateEx
    Public Constructor B(): Inherited CreateEx(-1, -1);
    Begin
        
    End Constructor;
End Class;

Sub Test();
Var
    Obj: A;
    Obj1: B;
Begin
    Obj := New A(); //Вызов конструктора по умолчанию A.Create()
    Obj := New A.Create(); //Явный вызов конструктора по умолчанию A.Create()
    Obj := New A(1); //Вызов конструктора с параметром A.Create(i: Integer)
    Obj1 := New B(); //Вызов конструктора по умолчанию B.Create()
End Sub;

См. также:

Классы