This documentation is archived and is not being maintained.

10.10 Instance constructors

Visual Studio .NET 2003

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:

attributesopt   constructor-modifiersopt   constructor-declarator   constructor-body
constructor-modifiers   constructor-modifier
identifier   (   formal-parameter-listopt   )   constructor-initializeropt
:   base   (   argument-listopt   )
:   this   (   argument-listopt   )

A constructor-declaration may include a set of attributes (Section 17), a valid combination of the four access modifiers (Section 10.2.3), and an extern (Section 10.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 (Section 10.5). The formal parameter list defines the signature (Section 3.6) of an instance constructor and governs the process whereby overload resolution (Section 7.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 (Section 3.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 Section 10.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 that 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 (Section 10.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 (Section 10.10.4).

Instance constructors are invoked by object-creation-expressions (Section and through constructor-initializers.