X hits on this document

935 views

0 shares

0 downloads

0 comments

68 / 396

Chapter ‎18   Unsafe code

Each block or switch-block creates a declaration space for local variables and constants. Names are introduced into this declaration space through local-variable-declarations and local-constant-declarations. 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.

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 goto-statements. 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 (§‎3.7).

Declaration order for enum member declarations (§‎14.3) is significant when constant-expression values are omitted.

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.

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.

Copyright Microsoft Corporation 1999-2003. All Rights Reserved.55

Document info
Document views935
Page views935
Page last viewedWed Dec 07 22:37:19 UTC 2016
Pages396
Paragraphs9401
Words133190

Comments