分享
 
 
 

10.3 Declarations

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

10.3 Declarations

Declarations in a C# program define the constituent elements of the program.

C# programs are organized

using namespaces (?6), which can contain type declarations and nested

namespace declarations. Type

declarations (?6.5) are used to define classes (?7), structs (?8),

interfaces (?0), enums (?1), and

delegates (?2). The kinds of members permitted in a type declaration

depend on the form of the type

declaration. For instance, class declarations can contain declarations for

constants (?7.3), fields (?7.4),

methods (?7.5), properties (?7.6), events (?7.7), indexers (?7.8),

operators (?7.9), instance

constructors (?7.10), destructors (?7.12), static constructors (?7.11),

and nested types.

A declaration defines a name in the declaration space to which the

declaration belongs. Except for

overloaded members (?0.6), it is a compile-time error to have two or more

declarations that introduce

members with the same name in a declaration space. However, no diagnostic

is required if the declaration

space is a namespace for the global declaration space and the conflicting

declarations are in separate

programs. It is never possible for a declaration space to contain different

kinds of members with the same

name. [Example: For example, a declaration space can never contain a field

and a method by the same name.

end example]

There are several different types of declaration spaces, as described in

the following.

?Within all source files of a program, namespace-member-declarations with

no enclosing namespacedeclaration

are members of a single combined declaration space called the global

declaration space.

?Within all source files of a program, namespace-member-declarations

within namespace-declarations

that have the same fully qualified namespace name are members of a single

combined declaration space.

?Each class, struct, or interface declaration creates a new declaration

space. Names are introduced into

this declaration space through class-member-declarations,

struct-member-declarations, or interfacemember-

declarations. Except for overloaded instance constructor declarations and

static constructor

declarations, a class or struct member declaration cannot introduce a

member by the same name as the

class or struct. A class, struct, or interface permits the declaration of

overloaded methods and indexers.

Furthermore, a class or struct permits the declaration of overloaded

instance constructors and operators.

[Example: For example, a class, struct, or interface may contain multiple

method declarations with the

same name, provided these method declarations differ in their signature (?0.

6). end example] Base

classes do not contribute to the declaration space of a class, and base

interfaces do not contribute to the

declaration space of an interface. Thus, a derived class or interface is

allowed to declare a member with

the same name as an inherited member. Such a member is said to hide the

inherited member.

?Each enumeration declaration creates a new declaration space. Names are

introduced into this

declaration space through enum-member-declarations.

?Each block or switch-block creates a declaration space for local

variables and local constants. Names are

introduced into this declaration space through local-variable-declarations

and local-constantdeclarations.

If a block is the body of an instance constructor, method, or operator

declaration, or a get

or set accessor for an indexer declaration, the parameters declared in such

a declaration are members of

the block.s local variable declaration space. The local variable

declaration space of a block includes

any nested blocks. Thus, within a nested block it is not possible to

declare a local variable or constant

with the same name as a local variable or constant in an enclosing block.

Chapter 10 Basic concepts

71

?Each block or switch-block creates a separate declaration space for

labels. Names are introduced into

this declaration space through labeled-statements, and the names are

referenced through gotostatements.

The label declaration space of a block includes any nested blocks. Thus,

within a nested

block it is not possible to declare a label with the same name as a label

in an enclosing block.

The textual order in which names are declared is generally of no

significance. In particular, textual order is

not significant for the declaration and use of namespaces, constants,

methods, properties, events, indexers,

operators, instance constructors, destructors, static constructors, and

types. Declaration order is significant in

the following ways:

?Declaration order for field declarations and local variable declarations

determines the order in which

their initializers (if any) are executed.

?Local variables must be defined before they are used (?0.7).

?Declaration order for enum member declarations (?1.3) is significant

when constant-expression values

are omitted.

[Example: The declaration space of a namespace is .open ended., and two

namespace declarations with the

same fully qualified name contribute to the same declaration space. For

example

namespace Megacorp.Data

{

class Customer

{

.

}

}

namespace Megacorp.Data

{

class Order

{

.

}

}

The two namespace declarations above contribute to the same declaration

space, in this case declaring two

classes with the fully qualified names Megacorp.Data.Customer and

Megacorp.Data.Order. Because

the two declarations contribute to the same declaration space, it would

have caused a compile-time error if

each contained a declaration of a class with the same name. end example]

[Note: As specified above, the declaration space of a block includes any

nested blocks. Thus, in the

following example, the F and G methods result in a compile-time error

because the name i is declared in the

outer block and cannot be redeclared in the inner block. However, the H and

I methods are valid since the

two i.s are declared in separate non-nested blocks.

class A

{

void F() {

int i = 0;

if (true) {

int i = 1;

}

}

void G() {

if (true) {

int i = 0;

}

int i = 1;

}

C# LANGUAGE SPECIFICATION

72

void H() {

if (true) {

int i = 0;

}

if (true) {

int i = 1;

}

}

void I() {

for (int i = 0; i < 10; i++)

H();

for (int i = 0; i < 10; i++)

H();

}

}

end note]

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有