An object-creation-expression is used to create a new instance of a
class-type or a value-type.
object-creation-expression:
new type ( argument-listopt )
The type of an object-creation-expression must be a class-type or a
value-type. The type cannot be an
abstract class-type.
Chapter 14 Expressions
147
The optional argument-list (?4.4.1) is permitted only if the type is a
class-type or a struct-type.
The compile-time processing of an object-creation-expression of the form
new T(A), where T is a class-type
or a value-type and A is an optional argument-list, consists of the
following steps:
?If T is a value-type and A is not present:
The object-creation-expression is a default constructor invocation. The
result of the object-creationexpression
is a value of type T, namely the default value for T as defined in ?1.1.1.
?Otherwise, if T is a class-type or a struct-type:
If T is an abstract class-type, a compile-time error occurs.
The instance constructor to invoke is determined using the overload
resolution rules of ?4.4.2. The set of
candidate instance constructors consists of all accessible instance
constructors declared in T. If the set of
candidate instance constructors is empty, or if a single best instance
constructor cannot be identified, a
compile-time error occurs.
The result of the object-creation-expression is a value of type T, namely
the value produced by invoking the
instance constructor determined in the step above.
?Otherwise, the object-creation-expression is invalid, and a compile-time
error occurs.
The run-time processing of an object-creation-expression of the form new
T(A), where T is class-type or a
struct-type and A is an optional argument-list, consists of the following
steps:
?If T is a class-type:
A new instance of class T is allocated. If there is not enough memory
available to allocate the new instance,
a System.OutOfMemoryException is thrown and no further steps are executed.
All fields of the new instance are initialized to their default values (?2.2
).
The instance constructor is invoked according to the rules of function
member invocation (?4.4.3). A
reference to the newly allocated instance is automatically passed to the
instance constructor and the instance
can be accessed from within that constructor as this.
?If T is a struct-type:
An instance of type T is created by allocating a temporary local variable.
Since an instance constructor of a
struct-type is required to definitely assign a value to each field of the
instance being created, no initialization
of the temporary variable is necessary.
The instance constructor is invoked according to the rules of function
member invocation (?4.4.3). A
reference to the newly allocated instance is automatically passed to the
instance constructor and the instance
can be accessed from within that constructor as this.