ECMA-334 C# Language Specification17.10: Instance constructors |
An instance constructor is a member that implements the actions required to initialize an instance of a class. Instance constructors are declared using constructor-declarations:
attributes
opt constructor-modifiers
opt constructor-declarator
constructor-body
constructor-modifier
constructor-modifiers
constructor-modifier
identifier
(
formal-parameter-list
opt )
constructor-initializer
opt :
base (
argument-list
opt )
:
this (
argument-list
opt )
block
;
A constructor-declaration
may include a set of attributes (24), a valid combination of the four access modifiers (17.2.3), and an extern (17.5.7) modifier. A constructor declaration is not permitted to include the same modifier multiple times.
The identifier of a constructor-declarator
must name the class in which the instance constructor is declared. If any other name is specified, a compile-time error occurs.
The optional formal-parameter-list
of an instance constructor is subject to the same rules as the formal-parameter-list
of a method (17.5). The formal parameter list defines the signature (10.6) of an instance constructor and governs the process whereby overload resolution (14.4.2) selects a particular instance constructor in an invocation.
Each of the types referenced in the formal-parameter-list
of an instance constructor must be at least as accessible as the constructor itself (10.5.4).
The optional constructor-initializer
specifies another instance constructor to invoke before executing the statements given in the constructor-body
of this instance constructor. This is described further in 17.10.1.
When a constructor declaration includes an extern modifier, the constructor is said to be an external constructor.
Because an external constructor declaration provides no actual implementation, its constructor-body
consists of a semicolon. For all other constructors, the constructor-body
consists of a block, which specifies the statements to initialize a new instance of the class. This corresponds exactly to the block of an instance method with a void return type (17.5.8).
Instance constructors are not inherited. Thus, a class has no instance constructors other than those actually declared in the class. If a class contains no instance constructor declarations, a default instance constructor is automatically provided (17.10.4).
Instance constructors are invoked by object-creation-expression
s (14.5.10.1) and through constructor-initializer
s.
In This Section: