Конструкторы - это члены класса, которые реализуют действия, необходимые для инициализации класса или нового экземпляра класса. Существует два вида конструкторов:
Экземплярные. Экземплярные конструкторы инициализируют новый объект класса. При каждом вызове такого конструктора создаётся новый объект и возвращается ссылка на него. Конструктор может иметь параметры, набор параметров определяет его сигнатуру. Экземплярные конструкторы не наследуются производными классами. Использование ключевого слова Inherited в заголовке конструктора приведёт к вызову указанного конструктора базового класса при создании объекта производного класса. Если ключевое слово Inherited не указано, то можно указать один из конструкторов текущего класса. Если класс не содержит ни одного определения экземплярного конструктора, то для него автоматически генерируется экземплярный конструктор по-умолчанию. При создании объектов перед экземплярным конструктором указывается ключевое слово New;
Статические. Статические конструкторы осуществляют инициализацию самого класса. Статические конструкторы не наследуются производными классами, не могут быть явно вызваны и не могут иметь параметры. Статический конструктор выполняется максимум один раз для каждого домена приложения при создании экземпляра класса с помощью экземплярного конструктора или при обращении к любому статическому члену класса.
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;
Class UserObject
Public Shared i: Integer;
Public Shared s: String;
//Данный конструктор будет вызван при первом
обращении к статическим полям,
//или при создании экземпляра объекта
Shared Constructor Create();
Begin
i := integer.MinValue;
s := "Default";
End Constructor;
End Class;
См. также: