14.5.10.1 Object creation expressions

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.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值