Конструктор (объектно-ориентированное программирование) - Constructor (object-oriented programming)
В классе на основе объектно-ориентированного программирования , конструктор (аббревиатура: т е р ) представляет собой особый тип подпрограммы призваны создать объект . Он подготавливает новый объект к использованию, часто принимая аргументы, которые конструктор использует для установки требуемых переменных-членов .
Конструктор похож на метод экземпляра , но отличается от метода тем, что у него нет явного типа возвращаемого значения , он не наследуется неявно и обычно имеет другие правила для модификаторов области видимости. Конструкторы часто имеют то же имя, что и объявленный класс . У них есть задача инициализировать элементы данных объекта и установить инвариант класса , но это не удается, если инвариант недействителен. Правильно написанный конструктор оставляет результирующий объект в допустимом состоянии. Неизменяемые объекты должны быть инициализированы в конструкторе.
Большинство языков допускают перегрузку конструктора, поскольку для класса может быть несколько конструкторов с разными параметрами. Некоторые языки принимают во внимание некоторые особые типы конструкторов. Конструкторы, которые конкретно используют один класс для создания объектов и возврата нового экземпляра класса, абстрагируются фабриками , которые также создают объекты, но могут делать это различными способами, используя несколько классов или разные схемы распределения, такие как пул объектов .
Типы
Параметризованные конструкторы
Конструкторы, которые могут принимать хотя бы один аргумент, называются параметризованными конструкторами. Когда объект объявляется в параметризованном конструкторе, начальные значения должны быть переданы в качестве аргументов функции конструктора. Обычный способ объявления объекта может не работать. Конструкторы можно вызывать явно или неявно. Метод неявного вызова конструктора также называется сокращенным методом. Если мы хотим инициализировать поля класса вашими собственными значениями, используйте параметризованный конструктор.
class Example {
public:
Example();
Example(int a, int b); // Parameterized constructor.
private:
int x_;
int y_;
};
Example::Example() = default;
Example::Example(int x, int y) : x_(x), y_(y) {}
Example e = Example(0, 50); // Explicit call.
Example e2(0, 50); // Implicit call.
Конструкторы по умолчанию
Если программист не предоставляет конструктор для экземпляра класса, компилятор Java вставляет конструктор по умолчанию в ваш код от вашего имени. Этот конструктор известен как конструктор по умолчанию. Вы не найдете его в исходном коде (файле java), поскольку он будет вставлен в код во время компиляции и существует в файле .class. Поведение конструктора по умолчанию зависит от языка. Он может инициализировать элементы данных нулевыми или другими одинаковыми значениями или вообще ничего не делать. В Java «конструктор по умолчанию» относится к конструктору с нулевым значением, который автоматически генерируется компилятором, если для класса не определены конструкторы или в отсутствие каких-либо конструкторов, определенных программистом (например, в Java конструктор по умолчанию неявно вызывает нулевого конструктора суперкласса, затем выполняет пустое тело). Для всех полей сохраняются начальные значения 0 (целочисленные типы), 0,0 (типы с плавающей запятой), false (логический тип) или null (ссылочные типы).
#include <iostream>
class Student {
public:
Student(int a = 0, int b = 0); // Default constructor.
int a;
int b;
};
Копировать конструкторы
Как и C ++, Java также поддерживает «Конструктор копирования». Но, в отличие от C ++, Java не создает конструктор копирования по умолчанию, если вы не пишете свой собственный. Конструкторы копирования определяют действия, выполняемые компилятором при копировании объектов класса. У конструктора Copy есть один формальный параметр, который является типом класса (параметр может быть ссылкой на объект). Он используется для создания копии существующего объекта того же класса. Несмотря на то, что оба класса одинаковы, он считается конструктором преобразования. Хотя конструкторы копирования обычно сокращенно называются ctor или cctor, они не имеют ничего общего с конструкторами классов, используемыми в .NET, использующими то же сокращение.
Конструкторы преобразования
Конструкторы преобразования предоставляют компилятору средство неявно создавать объект, принадлежащий одному классу, на основе объекта другого типа. Эти конструкторы обычно вызываются неявно для преобразования аргументов или операндов в соответствующий тип, но они также могут вызываться явно.
Конструкторы перемещения
В C ++ конструкторы перемещения принимают ссылку на значение объекта класса и используются для реализации передачи владения ресурсами объекта параметра.
Синтаксис
- Java , C ++ , C # , ActionScript , PHP 4 и MATLAB имеют соглашение об именах, в котором конструкторы имеют то же имя, что и класс, с которым они связаны.
- В PHP 5 рекомендуемое имя конструктора
__construct
. Для обратной совместимости будет вызываться метод с тем же именем, что и у класса, если__construct
метод не может быть найден. Начиная с PHP 5.3.3, это работает только для классов без пространства имен. - В PHP 7 вы всегда должны называть конструктор как
__construct
. Методы с тем же именем, что и класс, вызовут ошибку уровня E_DEPRECATED. - В Perl конструкторы по соглашению называются «новыми» и должны создавать изрядное количество объектов.
- В объектной системе Moose для Perl конструкторы (с именем new ) создаются автоматически и расширяются путем указания метода BUILD .
- В Visual Basic .NET конструктор называется "
New
". - В Python конструктор разделен на два метода: «
__new__
» и «__init__
».__new__
Метод отвечает за выделение памяти для экземпляра, и принимает класс в качестве аргумента (обычно называемого "cls
«).__init__
Метод (часто называемый «инициализатором») передается вновь созданный экземпляр в качестве аргумента (обычно называемого "self
«). -
Конструкторы Object Pascal обозначаются ключевым словом "
constructor
" и могут иметь пользовательские имена (но чаще всего называются "Create
"). - В Objective-C метод конструктора разделен на два метода, "
alloc
" и "init
", причемalloc
метод выделяет (выделяет) память для экземпляра класса, аinit
метод обрабатывает основную часть инициализации экземпляра. Вызов метода "new
" вызывает как методы, такalloc
иinit
методы для экземпляра класса.
Организация памяти
В Java, C # и VB .NET конструктор создает объекты ссылочного типа в специальной структуре памяти, называемой « кучей ». Типы значений (такие как int, double и т. Д.) Создаются в последовательной структуре, называемой « стеком ». VB .NET и C # также позволяют использовать новый оператор для создания объектов типа значения, но эти объекты типа значения создаются в стеке независимо от того, используется оператор или нет.
В C ++ объекты создаются в стеке, когда конструктор вызывается без оператора new, и создаются в куче, когда конструктор вызывается с оператором new. Объекты стека удаляются неявно, когда они выходят за пределы области видимости, в то время как объекты кучи должны быть удалены неявно с помощью деструктора или явно с помощью оператора удаления .
Сведения о языке
C ++
В C ++ имя конструктора - это имя класса. Он ничего не возвращает. У него могут быть параметры, как у любой функции-члена . Функции конструктора обычно объявляются в общедоступном разделе, но также могут быть объявлены в защищенном и закрытом разделах, если пользователь хочет ограничить доступ к ним.
Конструктор состоит из двух частей. Сначала идет список инициализаторов, который следует за списком параметров и перед телом метода. Он начинается с двоеточия, а записи разделяются запятыми. Список инициализаторов не требуется, но дает возможность предоставлять значения для элементов данных и избегать отдельных операторов присваивания. Список инициализаторов требуется, если у вас есть элементы данных константного или ссылочного типа или члены, не имеющие логики конструктора без параметров. Назначения происходят в соответствии с порядком, в котором объявлены элементы данных (даже если порядок в списке инициализаторов отличается). Вторая часть - это тело, которое представляет собой обычное тело метода, заключенное в фигурные скобки.
C ++ позволяет использовать более одного конструктора. Остальные конструкторы должны иметь другие параметры. Кроме того, конструкторы, которые содержат параметры, которым заданы значения по умолчанию, должны придерживаться ограничения, согласно которому не всем параметрам присваиваются значения по умолчанию. Это ситуация, которая имеет значение только при наличии конструктора по умолчанию. Конструктор базового класса (или базовых классов) также может вызываться производным классом. Функции-конструкторы не наследуются, и на их адреса нельзя ссылаться. Когда требуется выделение памяти, неявно вызываются операторы new и delete .
Конструктор копирования имеет параметр того же типа, который передается как ссылка на константу , например Vector (const Vector & rhs) . Если это не указано явно, компилятор использует конструктор копирования для каждой переменной-члена или просто копирует значения в случае примитивных типов. Реализация по умолчанию неэффективна, если класс имеет динамически выделяемые члены (или дескрипторы для других ресурсов), потому что это может привести к двойным вызовам удаления (или двойному освобождению ресурсов) после уничтожения.
class Foobar {
public:
Foobar(double r = 1.0,
double alpha = 0.0) // Constructor, parameters with default values.
: x_(r * cos(alpha)) // <- Initializer list
{
y_ = r * sin(alpha); // <- Normal assignment
}
private:
double x_;
double y_;
};
Примеры вызовов:
Foobar a,
b(3),
c(5, M_PI/4);
При возврате объектов из функций или передаче объектов по значению конструктор копирования объектов будет вызываться неявно, если не применяется оптимизация возвращаемого значения .
C ++ неявно генерирует конструктор копирования по умолчанию, который будет вызывать конструкторы копирования для всех базовых классов и всех переменных-членов, если программист не предоставит его, явно удаляет конструктор копирования (для предотвращения клонирования) или один из базовых классов или конструктор копирования переменных-членов удаляется или недоступен (частный). В большинстве случаев, когда требуется настраиваемый конструктор копирования (например, подсчет ссылок , глубокая копия указателей), также требуется настройка деструктора и оператора присваивания копии . Это обычно называют Правилом трех .
C #
Пример конструктора C # :
public class MyClass
{
private int a;
private string b;
// Constructor
public MyClass() : this(42, "string")
{
}
// Overloading a constructor
public MyClass(int a, string b)
{
this.a = a;
this.b = b;
}
}
// Code somewhere
// Instantiating an object with the constructor above
MyClass c = new MyClass(42, "string");
Статический конструктор C #
В C # , A статический конструктор является инициализатором статического данные. Статические конструкторы также называются конструкторами классов . Поскольку фактически сгенерированный метод имеет имя .cctor, их часто также называют "cctors".
Статические конструкторы позволяют инициализировать сложную статическую переменную. Статические конструкторы вызываются неявно при первом обращении к классу. Любой вызов класса (статический вызов или вызов конструктора) запускает выполнение статического конструктора. Статические конструкторы являются потокобезопасными и реализуют одноэлементный шаблон . При использовании в универсальном классе программирования статические конструкторы вызываются при каждом новом создании универсального экземпляра, по одному для каждого типа. Также создаются статические переменные.
public class MyClass
{
private static int _A;
// Normal constructor
static MyClass()
{
_A = 32;
}
// Standard default constructor
public MyClass()
{
}
}
// Code somewhere
// Instantiating an object with the constructor above
// right before the instantiation
// The variable static constructor is executed and _A is 32
MyClass c = new MyClass();
CFML
CFML использует метод с именем " init
" как метод конструктора.
Cheese.cfc
component {
// properties
property name="cheeseName";
// constructor
function Cheese init( required string cheeseName ) {
variables.cheeseName = arguments.cheeseName;
return this;
}
}
Создайте экземпляр сыра.
myCheese = new Cheese( 'Cheddar' );
Начиная с ColdFusion 10, CFML также поддерживает указание имени метода конструктора:
component initmethod="Cheese" {
// properties
property name="cheeseName";
// constructor
function Cheese Cheese( required string cheeseName ) {
variables.cheeseName = arguments.cheeseName;
return this;
}
}
Эйфелева
В Eiffel процедуры инициализации новых объектов называются процедурами создания . Процедуры создания имеют следующие особенности:
- Процедуры создания не имеют явного возвращаемого типа (по определению процедуры ).
- Названы процедуры создания.
- Процедуры создания обозначаются по имени как процедуры создания в тексте класса.
- Процедуры создания могут быть явно вызваны для повторной инициализации существующих объектов.
- Каждый эффективный (т.е. конкретный или не абстрактный) класс должен обозначать как минимум одну процедуру создания.
- Процедуры создания должны оставлять вновь инициализированный объект в состоянии, удовлетворяющем инварианту класса.
Хотя создание объекта связано с некоторыми тонкостями, создание атрибута с типичным объявлением, x: T
выраженным в инструкции по созданию, create x.make
состоит из следующей последовательности шагов:
- Создайте новый прямой экземпляр типа
T
. - Выполните процедуру создания
make
для вновь созданного экземпляра. - Присоедините вновь инициализированный объект к сущности
x
.
В первом фрагменте ниже POINT
определен класс . Процедура make
кодируется после ключевого слова feature
.
Ключевое слово create
вводит список процедур, которые можно использовать для инициализации экземпляров. В этом случае список включает default_create
процедуру с пустой реализацией, унаследованной от класса ANY
, и make
процедуру, закодированную внутри класса.
class
POINT
create
default_create, make
feature
make (a_x_value: REAL; a_y_value: REAL)
do
x := a_x_value
y := a_y_value
end
x: REAL
-- X coordinate
y: REAL
-- Y coordinate
...
Во втором фрагменте класс, который является клиентом, POINT
имеет объявления my_point_1
и my_point_2
тип POINT
.
В процедурном коде my_point_1
создается как источник (0,0, 0,0). Поскольку процедура создания не указана, используется процедура, default_create
унаследованная от класса ANY
. Эта строка могла быть закодирована create my_point_1.default_create
. В инструкции с create
ключевым словом могут использоваться только процедуры, названные процедурами создания . Далее идет инструкция по созданию my_point_2
, предоставляющая начальные значения для my_point_2
координат. Третья инструкция выполняет обычный вызов экземпляра make
процедуры для повторной инициализации экземпляра, присоединенного к нему, my_point_2
с другими значениями.
my_point_1: POINT
my_point_2: POINT
...
create my_point_1
create my_point_2.make (3.0, 4.0)
my_point_2.make (5.0, 8.0)
...
F #
В F # конструктор может включать любые операторы let
или, do
определенные в классе. let
операторы определяют закрытые поля, а do
операторы выполняют код. Дополнительные конструкторы можно определить с помощью new
ключевого слова.
type MyClass(_a : int, _b : string) = class
// Primary constructor
let a = _a
let b = _b
do printfn "a = %i, b = %s" a b
// Additional constructors
new(_a : int) = MyClass(_a, "") then
printfn "Integer parameter given"
new(_b : string) = MyClass(0, _b) then
printfn "String parameter given"
new() = MyClass(0, "") then
printfn "No parameter given"
end
// Code somewhere
// instantiating an object with the primary constructor
let c1 = new MyClass(42, "string")
// instantiating an object with additional constructors
let c2 = new MyClass(42)
let c3 = new MyClass("string")
let c4 = MyClass() // "new" keyword is optional
Джава
В Java конструкторы отличаются от других методов тем, что:
- Конструкторы никогда не имеют явного возвращаемого типа.
- Конструкторы не могут быть вызваны напрямую (их вызывает ключевое слово «
new
»). - У конструкторов не должно быть модификаторов, запрещающих доступ.
Конструкторы Java выполняют следующие задачи в следующем порядке:
- Вызовите конструктор суперкласса по умолчанию, если конструктор не определен.
- Инициализируйте переменные-члены указанными значениями.
- Выполняет тело конструктора.
Java разрешает пользователям вызывать один конструктор в другом конструкторе с помощью this()
ключевого слова. Но this()
должно быть первое заявление.
class Example
{
Example() // Non-parameterized constructor
{
this(1); // Calling of constructor
System.out.println("0-arg-cons");
}
Example(int a) // Parameterized constructor
{
System.out.println("1-arg-cons");
}
}
public static void main(String[] args)
{
Example e = new Example();
}
Java предоставляет доступ к конструктору суперкласса через super
ключевое слово.
public class Example
{
// Definition of the constructor.
public Example()
{
this(1);
}
// Overloading a constructor
public Example(int input)
{
data = input; // This is an assignment
}
// Declaration of instance variable(s).
private int data;
}
// Code somewhere else
// Instantiating an object with the above constructor
Example e = new Example(42);
Конструктор, принимающий нулевое количество аргументов, называется конструктором без аргументов или без аргументов.
JavaScript
Начиная с ES6, в JavaScript есть прямые конструкторы, как и во многих других языках программирования. Они написаны как таковые
class FooBar {
constructor(baz) {
this.baz = baz
}
}
Это может быть создано как таковое
const foo = new FooBar('7')
Эквивалентом этого до ES6 было создание функции, которая создает экземпляр объекта как такового.
function FooBar (baz) {
this.baz = baz;
}
Это создается так же, как указано выше.
Object Pascal
В Object Pascal конструктор похож на фабричный метод . Единственное синтаксическое отличие от обычных методов - это ключевое слово constructor
перед именем (вместо procedure
или function
). Он может иметь любое имя, хотя по соглашению используется Create
префикс, например in CreateWithFormatting
. Создание экземпляра класса работает как вызов статического метода класса: TPerson.Create('Peter')
.
program OopProgram;
type
TPerson = class
private
FName: string;
public
property Name: string read FName;
constructor Create(AName: string);
end;
constructor TPerson.Create(AName: string);
begin
FName := AName;
end;
var
Person: TPerson;
begin
Person := TPerson.Create('Peter'); // allocates an instance of TPerson and then calls TPerson.Create with the parameter AName = 'Peter'
end.
OCaml
В OCaml есть один конструктор. Параметры определяются сразу после имени класса. Они могут использоваться для инициализации переменных экземпляра и доступны для всего класса. Вызываемый анонимный скрытый метод initializer
позволяет оценить выражение сразу после создания объекта.
class person first_name last_name =
object
val full_name = first_name ^ " " ^ last_name
initializer
print_endline("Hello there, I am " ^ full_name ^ ".")
method get_last_name = last_name
end;;
let alonzo = new person "Alonzo" "Church" in (*Hello there, I am Alonzo Church.*)
print_endline alonzo#get_last_name (*Church*)
PHP
В PHP версии 5 и выше конструктором является метод с именем __construct()
(обратите внимание, что это двойное подчеркивание), который ключевое слово new
автоматически вызывает после создания объекта. Обычно он используется для автоматического выполнения инициализации, такой как инициализация свойств. Конструкторы также могут принимать аргументы, и в этом случае, когда new
оператор написан, вам также необходимо отправить аргументы конструктора для параметров.
class Person
{
private string $name;
public function __construct(string $name): void
{
$this->name = $name;
}
public function getName(): string
{
return $this->name;
}
}
Perl 5
В языке программирования Perl версии 5 по умолчанию конструкторы являются фабричными методами , то есть методами, которые создают и возвращают объект, что конкретно означает создание и возврат благословенной ссылки. Типичный объект - это ссылка на хэш, хотя ссылки на другие типы также используются редко. По соглашению единственный конструктор называется новым , хотя ему разрешено называть его иначе или иметь несколько конструкторов. Например, класс Person может иметь конструктор с именем new, а также конструктор new_from_file, который считывает файл для атрибутов Person, и new_from_person, который использует другой объект Person в качестве шаблона.
package Person;
# In Perl constructors are named 'new' by convention.
sub new {
# Class name is implicitly passed in as 0th argument.
my $class = shift;
# Default attribute values, if you have any.
my %defaults = ( foo => "bar" );
# Initialize attributes as a combination of default values and arguments passed.
my $self = { %defaults, @_ };
# Check for required arguments, class invariant, etc.
if ( not defined $self->{first_name} ) {
die "Mandatory attribute missing in Person->new(): first_name";
}
if ( not defined $self->{last_name} ) {
die "Mandatory attribute missing in Person->new(): last_name";
}
if ( defined $self->{age} and $self->{age} < 18 ) {
die "Invalid attribute value in Person->new(): age < 18";
}
# Perl makes an object belong to a class by 'bless'.
bless $self, $class;
return $self;
}
1;
Perl 5 с Moose
В объектной системе Moose для Perl большую часть этого шаблона можно исключить, создать новый по умолчанию , можно указать атрибуты, а также указать, могут ли они быть установлены, сброшены или являются обязательными. Кроме того, любые дополнительные функции конструктора могут быть включены в метод BUILD, который сгенерированный конструктор Moose вызовет после проверки аргументов. Можно указать метод BUILDARGS для обработки аргументов конструктора не в форме hashref / key => value.
package Person;
# enable Moose-style object construction
use Moose;
# first name ( a string) can only be set at construction time ('ro')
has first_name => (is => 'ro', isa => 'Str', required => 1);
# last name ( a string) can only be set at construction time ('ro')
has last_name => (is => 'ro', isa => 'Str', required => 1);
# age (Integer) can be modified after construction ('rw'), and is not required
# to be passed to be constructor. Also creates a 'has_age' method which returns
# true if age has been set
has age => (is => 'rw', isa => 'Int', predicate => 'has_age');
# Check custom requirements
sub BUILD {
my $self = shift;
if ($self->has_age && $self->age < 18) { # no under 18s
die "No under-18 Persons";
}
}
1;
В обоих случаях класс Person создается следующим образом:
use Person;
my $p = Person->new( first_name => 'Sam', last_name => 'Ashe', age => 42 );
Python
В Python , конструкторы определяются одним или обоими __new__
и __init__
методов. Новый экземпляр создается путем вызова класса , как если бы это была функция, которая вызывает __new__
и __init__
методы. Если метод конструктора не определен в классе, будет вызван следующий метод, найденный в порядке разрешения метода класса .
В типичном случае __init__
необходимо определить только метод. (Наиболее частое исключение - неизменяемые объекты.)
>>> class ExampleClass:
... def __new__(cls, value):
... print("Creating new instance...")
... # Call the superclass constructor to create the instance.
... instance = super(ExampleClass, cls).__new__(cls)
... return instance
... def __init__(self, value):
... print("Initialising instance...")
... self.payload = value
>>> exampleInstance = ExampleClass(42)
Creating new instance...
Initialising instance...
>>> print(exampleInstance.payload)
42
Классы обычно действуют как фабрики для новых экземпляров самих себя, то есть класс - это вызываемый объект (например, функция), при этом вызов является конструктором, а вызов класса возвращает экземпляр этого класса. Однако __new__
методу разрешено возвращать что-то, кроме экземпляра класса для специализированных целей. В этом случае __init__
не вызывается.
Раку
С Ракой , еще более шаблонным может быть опущено, если учесть , что по умолчанию новый метод наследуется, атрибуты могут быть определены, а также могут ли они быть установлены, сброшены, или требуются. Кроме того, любые дополнительные функции конструктора могут быть включены в метод BUILD, который будет вызываться для обеспечения возможности индивидуальной инициализации. TWEAK , метод может быть определен , чтобы после процесса любые атрибуты уже (неявно) инициализируется.
class Person {
has Str $.first-name is required; # First name (a string) can only be set at
# construction time (the . means "public").
has Str $.last-name is required; # Last name (a string) can only be set at
# construction time (a ! would mean "private").
has Int $.age is rw; # Age (an integer) can be modified after
# construction ('rw'), and is not required
# during the object instantiation.
# Create a 'full-name' method which returns the person's full name.
# This method can be accessed outside the class.
method full-name { $!first-name.tc ~ " " ~ $!last-name.tc }
# Create a 'has-age' method which returns true if age has been set.
# This method is used only inside the class so it's declared as "private"
# by prepending its name with a !
method !has-age { self.age.defined }
# Check custom requirements
method TWEAK {
if self!has-age && $!age < 18 { # No under 18
die "No person under 18";
}
}
}
Класс Person создается следующим образом:
my $p0 = Person.new( first-name => 'Sam', last-name => 'Ashe', age => 42 );
my $p1 = Person.new( first-name => 'grace', last-name => 'hopper' );
say $p1.full-name(); # OUTPUT: «Grace Hopper»
В качестве альтернативы именованные параметры могут быть указаны с использованием синтаксиса пары двоеточий в Perl 6:
my $p0 = Person.new( :first-name<Sam>, :last-name<Ashe>, :age(42) );
my $p1 = Person.new( :first-name<Grace>, :last-name<Hopper> );
И если вы установили переменные с именами, идентичными именованным параметрам, вы можете использовать ярлык, который будет использовать имя переменной для именованного параметра:
my $first-name = "Sam";
my $last-name = "Ashe";
my $age = 42;
my $p0 = Person.new( :$first-name, :$last-name, :$age );
Рубин
В Ruby конструкторы создаются путем определения вызываемого метода initialize
. Этот метод выполняется для инициализации каждого нового экземпляра.
irb(main):001:0> class ExampleClass
irb(main):002:1> def initialize
irb(main):003:2> puts "Hello there"
irb(main):004:2> end
irb(main):005:1> end
=> nil
irb(main):006:0> ExampleClass.new
Hello there
=> #<ExampleClass:0x007fb3f4299118>
Visual Basic .NET
В Visual Basic .NET конструкторы используют объявление метода с именем « New
».
Class Foobar
Private strData As String
' Constructor
Public Sub New(ByVal someParam As String)
strData = someParam
End Sub
End Class
' code somewhere else
' instantiating an object with the above constructor
Dim foo As New Foobar(".NET")
Смотрите также
- RAII
- Размещение сайта
- Созидательный образец
- Деструктор
- Глобальный конструктор в C ++ и его аналог в C, атрибут функции ((constructor))