10.8 Namespace and type names

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

10.8 Namespace and type names

Several contexts in a C# program require a namespace-name or a type-name to

be specified. Either form of

name is written as one or more identifiers separated by ... tokens.

namespace-name:

namespace-or-type-name

type-name:

namespace-or-type-name

namespace-or-type-name:

identifier

namespace-or-type-name . identifier

A type-name is a namespace-or-type-name that refers to a type. Following

resolution as described below, the

namespace-or-type-name of a type-name must refer to a type, or otherwise a

compile-time error occurs.

A namespace-name is a namespace-or-type-name that refers to a namespace.

Following resolution as

described below, the namespace-or-type-name of a namespace-name must refer

to a namespace, or

otherwise a compile-time error occurs.

The meaning of a namespace-or-type-name is determined as follows:

. If the namespace-or-type-name consists of a single identifier:

If the namespace-or-type-name appears within the body of a class or struct

declaration, then starting with

that class or struct declaration and continuing with each enclosing class

or struct declaration (if any), if a

member with the given name exists, is accessible, and denotes a type, then

the namespace-or-type-name

refers to that member. Non-type members (constants, fields, methods,

properties, indexers, operators,

instance constructors, destructors, and static constructors) are ignored

when determining the meaning of a

namespace-or-type-name.

Otherwise, starting with the namespace in which the namespace-or-type-name

occurs, continuing with each

enclosing namespace (if any), and ending with the global namespace, the

following steps are evaluated until

an entity is located:

C# LANGUAGE SPECIFICATION

84

. If the namespace contains a namespace member with the given name, then

the namespace-ortype-

name refers to that member and, depending on the member, is classified as a

namespace or

a type.

. Otherwise, if the namespace has a corresponding namespace declaration

enclosing the location

where the namespace-or-type-name occurs, then:

o If the namespace declaration contains a using-alias-directive that

associates the given name

with an imported namespace or type, then the namespace-or-type-name refers

to that

namespace or type.

o Otherwise, if the namespaces imported by the using-namespace-directives

of the namespace

declaration contain exactly one type with the given name, then the

namespace-or-type-name

refers to that type.

o Otherwise, if the namespaces imported by the using-namespace-directives

of the namespace

declaration contain more than one type with the given name, then the

namespace-or-typename

is ambiguous and an error occurs.

Otherwise, the namespace-or-type-name is undefined and a compile-time error

occurs.

. Otherwise, the namespace-or-type-name is of the form N.I, where N is a

namespace-or-type-name

consisting of all identifiers but the rightmost one, and I is the rightmost

identifier. N is first resolved as a

namespace-or-type-name. If the resolution of N is not successful, a

compile-time error occurs.

Otherwise, N.I is resolved as follows:

If N is a namespace and I is the name of an accessible member of that

namespace, then N.I refers to that

member and, depending on the member, is classified as a namespace or a type.

If N is a class or struct type and I is the name of an accessible type in

N, then N.I refers to that type.

Otherwise, N.I is an invalid namespace-or-type-name, and a compile-time

error occurs.

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