14.5.10.1 Object creation expressions

王朝other·作者佚名  2006-02-28
窄屏简体版  字體: |||超大  

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.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航