- •Foreword
- •Introduction
- •Scope
- •Conformance
- •Normative references
- •Definitions
- •Notational conventions
- •Acronyms and abbreviations
- •General description
- •Language overview
- •Getting started
- •Types
- •Predefined types
- •Conversions
- •Array types
- •Type system unification
- •Variables and parameters
- •Automatic memory management
- •Expressions
- •Statements
- •Classes
- •Constants
- •Fields
- •Methods
- •Properties
- •Events
- •Operators
- •Indexers
- •Instance constructors
- •Destructors
- •Static constructors
- •Inheritance
- •Static classes
- •Partial type declarations
- •Structs
- •Interfaces
- •Delegates
- •Enums
- •Namespaces and assemblies
- •Versioning
- •Extern Aliases
- •Attributes
- •Generics
- •Why generics?
- •Creating and consuming generics
- •Multiple type parameters
- •Constraints
- •Generic methods
- •Anonymous methods
- •Iterators
- •Lexical structure
- •Programs
- •Grammars
- •Lexical grammar
- •Syntactic grammar
- •Grammar ambiguities
- •Lexical analysis
- •Line terminators
- •Comments
- •White space
- •Tokens
- •Unicode escape sequences
- •Identifiers
- •Keywords
- •Literals
- •Boolean literals
- •Integer literals
- •Real literals
- •Character literals
- •String literals
- •The null literal
- •Operators and punctuators
- •Pre-processing directives
- •Conditional compilation symbols
- •Pre-processing expressions
- •Declaration directives
- •Conditional compilation directives
- •Diagnostic directives
- •Region control
- •Line directives
- •Pragma directives
- •Basic concepts
- •Application startup
- •Application termination
- •Declarations
- •Members
- •Namespace members
- •Struct members
- •Enumeration members
- •Class members
- •Interface members
- •Array members
- •Delegate members
- •Member access
- •Declared accessibility
- •Accessibility domains
- •Protected access for instance members
- •Accessibility constraints
- •Signatures and overloading
- •Scopes
- •Name hiding
- •Hiding through nesting
- •Hiding through inheritance
- •Namespace and type names
- •Unqualified name
- •Fully qualified names
- •Automatic memory management
- •Execution order
- •Types
- •Value types
- •The System.ValueType type
- •Default constructors
- •Struct types
- •Simple types
- •Integral types
- •Floating point types
- •The decimal type
- •The bool type
- •Enumeration types
- •Reference types
- •Class types
- •The object type
- •The string type
- •Interface types
- •Array types
- •Delegate types
- •Boxing and unboxing
- •Boxing conversions
- •Unboxing conversions
- •Variables
- •Variable categories
- •Static variables
- •Instance variables
- •Instance variables in classes
- •Instance variables in structs
- •Array elements
- •Value parameters
- •Reference parameters
- •Output parameters
- •Local variables
- •Default values
- •Definite assignment
- •Initially assigned variables
- •Initially unassigned variables
- •Precise rules for determining definite assignment
- •General rules for statements
- •Block statements, checked, and unchecked statements
- •Expression statements
- •Declaration statements
- •If statements
- •Switch statements
- •While statements
- •Do statements
- •For statements
- •Break, continue, and goto statements
- •Throw statements
- •Return statements
- •Try-catch statements
- •Try-finally statements
- •Try-catch-finally statements
- •Foreach statements
- •Using statements
- •Lock statements
- •General rules for simple expressions
- •General rules for expressions with embedded expressions
- •Invocation expressions and object creation expressions
- •Simple assignment expressions
- •&& expressions
- •|| expressions
- •! expressions
- •?: expressions
- •Anonymous method expressions
- •Yield statements
- •Variable references
- •Atomicity of variable references
- •Conversions
- •Implicit conversions
- •Identity conversion
- •Implicit numeric conversions
- •Implicit enumeration conversions
- •Implicit reference conversions
- •Boxing conversions
- •Implicit type parameter conversions
- •Implicit constant expression conversions
- •User-defined implicit conversions
- •Explicit conversions
- •Explicit numeric conversions
- •Explicit enumeration conversions
- •Explicit reference conversions
- •Unboxing conversions
- •User-defined explicit conversions
- •Standard conversions
- •Standard implicit conversions
- •Standard explicit conversions
- •User-defined conversions
- •Permitted user-defined conversions
- •Evaluation of user-defined conversions
- •User-defined implicit conversions
- •User-defined explicit conversions
- •Anonymous method conversions
- •Method group conversions
- •Expressions
- •Expression classifications
- •Values of expressions
- •Operators
- •Operator precedence and associativity
- •Operator overloading
- •Unary operator overload resolution
- •Binary operator overload resolution
- •Candidate user-defined operators
- •Numeric promotions
- •Unary numeric promotions
- •Binary numeric promotions
- •Member lookup
- •Base types
- •Function members
- •Argument lists
- •Overload resolution
- •Applicable function member
- •Better function member
- •Better conversion
- •Function member invocation
- •Invocations on boxed instances
- •Primary expressions
- •Literals
- •Simple names
- •Invariant meaning in blocks
- •Parenthesized expressions
- •Member access
- •Identical simple names and type names
- •Invocation expressions
- •Method invocations
- •Delegate invocations
- •Element access
- •Array access
- •Indexer access
- •This access
- •Base access
- •Postfix increment and decrement operators
- •The new operator
- •Object creation expressions
- •Array creation expressions
- •Delegate creation expressions
- •The typeof operator
- •The checked and unchecked operators
- •Default value expression
- •Anonymous methods
- •Anonymous method signatures
- •Anonymous method blocks
- •Outer variables
- •Captured outer variables
- •Instantiation of local variables
- •Anonymous method evaluation
- •Implementation example
- •Unary expressions
- •Unary plus operator
- •Unary minus operator
- •Logical negation operator
- •Bitwise complement operator
- •Prefix increment and decrement operators
- •Cast expressions
- •Arithmetic operators
- •Multiplication operator
- •Division operator
- •Remainder operator
- •Addition operator
- •Subtraction operator
- •Shift operators
- •Relational and type-testing operators
- •Integer comparison operators
- •Floating-point comparison operators
- •Decimal comparison operators
- •Boolean equality operators
- •Enumeration comparison operators
- •Reference type equality operators
- •String equality operators
- •Delegate equality operators
- •The is operator
- •The as operator
- •Logical operators
- •Integer logical operators
- •Enumeration logical operators
- •Boolean logical operators
- •Conditional logical operators
- •Boolean conditional logical operators
- •User-defined conditional logical operators
- •Conditional operator
- •Assignment operators
- •Simple assignment
- •Compound assignment
- •Event assignment
- •Expression
- •Constant expressions
- •Boolean expressions
- •Statements
- •End points and reachability
- •Blocks
- •Statement lists
- •The empty statement
- •Labeled statements
- •Declaration statements
- •Local variable declarations
- •Local constant declarations
- •Expression statements
- •Selection statements
- •The if statement
- •The switch statement
- •Iteration statements
- •The while statement
- •The do statement
- •The for statement
- •The foreach statement
- •Jump statements
- •The break statement
- •The continue statement
- •The goto statement
- •The return statement
- •The throw statement
- •The try statement
- •The checked and unchecked statements
- •The lock statement
- •The using statement
- •The yield statement
- •Namespaces
- •Compilation units
- •Namespace declarations
- •Extern alias directives
- •Using directives
- •Using alias directives
- •Using namespace directives
- •Namespace members
- •Type declarations
- •Qualified alias member
- •Classes
- •Class declarations
- •Class modifiers
- •Abstract classes
- •Sealed classes
- •Static classes
- •Class base specification
- •Base classes
- •Interface implementations
- •Class body
- •Partial declarations
- •Class members
- •Inheritance
- •The new modifier
- •Access modifiers
- •Constituent types
- •Static and instance members
- •Nested types
- •Fully qualified name
- •Declared accessibility
- •Hiding
- •this access
- •Reserved member names
- •Member names reserved for properties
- •Member names reserved for events
- •Member names reserved for indexers
- •Member names reserved for destructors
- •Constants
- •Fields
- •Static and instance fields
- •Readonly fields
- •Using static readonly fields for constants
- •Versioning of constants and static readonly fields
- •Volatile fields
- •Field initialization
- •Variable initializers
- •Static field initialization
- •Instance field initialization
- •Methods
- •Method parameters
- •Value parameters
- •Reference parameters
- •Output parameters
- •Parameter arrays
- •Static and instance methods
- •Virtual methods
- •Override methods
- •Sealed methods
- •Abstract methods
- •External methods
- •Method body
- •Method overloading
- •Properties
- •Static and instance properties
- •Accessors
- •Virtual, sealed, override, and abstract accessors
- •Events
- •Field-like events
- •Event accessors
- •Static and instance events
- •Virtual, sealed, override, and abstract accessors
- •Indexers
- •Indexer overloading
- •Operators
- •Unary operators
- •Binary operators
- •Conversion operators
- •Instance constructors
- •Constructor initializers
- •Instance variable initializers
- •Constructor execution
- •Default constructors
- •Private constructors
- •Optional instance constructor parameters
- •Static constructors
- •Destructors
- •Structs
- •Struct declarations
- •Struct modifiers
- •Struct interfaces
- •Struct body
- •Struct members
- •Class and struct differences
- •Value semantics
- •Inheritance
- •Assignment
- •Default values
- •Boxing and unboxing
- •Meaning of this
- •Field initializers
- •Constructors
- •Destructors
- •Static constructors
- •Struct examples
- •Database integer type
- •Database boolean type
- •Arrays
- •Array types
- •The System.Array type
- •Array creation
- •Array element access
- •Array members
- •Array covariance
- •Arrays and the generic IList interface
- •Array initializers
- •Interfaces
- •Interface declarations
- •Interface modifiers
- •Base interfaces
- •Interface body
- •Interface members
- •Interface methods
- •Interface properties
- •Interface events
- •Interface indexers
- •Interface member access
- •Fully qualified interface member names
- •Interface implementations
- •Explicit interface member implementations
- •Interface mapping
- •Interface implementation inheritance
- •Interface re-implementation
- •Abstract classes and interfaces
- •Enums
- •Enum declarations
- •Enum modifiers
- •Enum members
- •The System.Enum type
- •Enum values and operations
- •Delegates
- •Delegate declarations
- •Delegate instantiation
- •Delegate invocation
- •Exceptions
- •Causes of exceptions
- •The System.Exception class
- •How exceptions are handled
- •Common Exception Classes
- •Attributes
- •Attribute classes
- •Attribute usage
- •Positional and named parameters
- •Attribute parameter types
- •Attribute specification
- •Attribute instances
- •Compilation of an attribute
- •Run-time retrieval of an attribute instance
- •Reserved attributes
- •The AttributeUsage attribute
- •The Conditional attribute
- •Conditional Methods
- •Conditional Attribute Classes
- •The Obsolete attribute
- •Unsafe code
- •Unsafe contexts
- •Pointer types
- •Fixed and moveable variables
- •Pointer conversions
- •Pointers in expressions
- •Pointer indirection
- •Pointer member access
- •Pointer element access
- •The address-of operator
- •Pointer increment and decrement
- •Pointer arithmetic
- •Pointer comparison
- •The sizeof operator
- •The fixed statement
- •Stack allocation
- •Dynamic memory allocation
- •Generics
- •Generic class declarations
- •Type parameters
- •The instance type
- •Members of generic classes
- •Static fields in generic classes
- •Static constructors in generic classes
- •Accessing protected members
- •Overloading in generic classes
- •Parameter array methods and type parameters
- •Overriding and generic classes
- •Operators in generic classes
- •Nested types in generic classes
- •Generic struct declarations
- •Generic interface declarations
- •Uniqueness of implemented interfaces
- •Explicit interface member implementations
- •Generic delegate declarations
- •Constructed types
- •Type arguments
- •Open and closed types
- •Base classes and interfaces of a constructed type
- •Members of a constructed type
- •Accessibility of a constructed type
- •Conversions
- •Using alias directives
- •Generic methods
- •Generic method signatures
- •Virtual generic methods
- •Calling generic methods
- •Inference of type arguments
- •Using a generic method with a delegate
- •Constraints
- •Satisfying constraints
- •Member lookup on type parameters
- •Type parameters and boxing
- •Conversions involving type parameters
- •Iterators
- •Iterator blocks
- •Enumerator interfaces
- •Enumerable interfaces
- •Yield type
- •This access
- •Enumerator objects
- •The MoveNext method
- •The Current property
- •The Dispose method
- •Enumerable objects
- •The GetEnumerator method
- •Implementation example
- •Lexical grammar
- •Line terminators
- •White space
- •Comments
- •Unicode character escape sequences
- •Identifiers
- •Keywords
- •Literals
- •Operators and punctuators
- •Pre-processing directives
- •Syntactic grammar
- •Basic concepts
- •Types
- •Expressions
- •Statements
- •Classes
- •Structs
- •Arrays
- •Interfaces
- •Enums
- •Delegates
- •Attributes
- •Generics
- •Grammar extensions for unsafe code
- •Undefined behavior
- •Implementation-defined behavior
- •Unspecified behavior
- •Other Issues
- •Capitalization styles
- •Pascal casing
- •Camel casing
- •All uppercase
- •Capitalization summary
- •Word choice
- •Namespaces
- •Classes
- •Interfaces
- •Enums
- •Static fields
- •Parameters
- •Methods
- •Properties
- •Events
- •Case sensitivity
- •Avoiding type name confusion
- •Documentation Comments
- •Introduction
- •Recommended tags
- •<code>
- •<example>
- •<exception>
- •<list>
- •<para>
- •<param>
- •<paramref>
- •<permission>
- •<remarks>
- •<returns>
- •<seealso>
- •<summary>
- •<value>
- •Processing the documentation file
- •ID string format
- •ID string examples
- •An example
- •C# source code
- •Resulting XML
|
C# LANGUAGE SPECIFICATION |
1 |
conversion-operator-declarator: |
2 |
implicit operator type ( type identifier ) |
3 |
explicit operator type ( type identifier ) |
4 |
operator-body: |
5 |
block |
6;
7constructor-declaration:
8 |
attributesopt constructor-modifiersopt constructor-declarator constructor-body |
9 |
constructor-modifiers: |
10 |
constructor-modifier |
11 |
constructor-modifiers constructor-modifier |
12 |
constructor-modifier: |
13 |
public |
14 |
protected |
15 |
internal |
16 |
private |
17extern
18constructor-declarator:
19 |
identifier ( formal-parameter-listopt ) constructor-initializeropt |
20 |
constructor-initializer: |
21 |
: base ( argument-listopt ) |
22 |
: this ( argument-listopt ) |
23 |
constructor-body: |
24 |
block |
25;
26static-constructor-declaration:
27 |
attributesopt static-constructor-modifiers identifier ( ) static-constructor-body |
28 |
static-constructor-modifiers: |
29 |
externopt static |
30static externopt
31static-constructor-body:
32 |
block |
33;
34destructor-declaration:
35 |
attributesopt externopt ~ identifier ( ) destructor-body |
36 |
destructor-body: |
37 |
block |
38;
39A.2.7 Structs
40struct-declaration:
41 |
attributesopt struct-modifiersopt partialopt struct identifier type-parameter-listopt |
42 |
struct-interfacesopt type-parameter-constraints-clausesopt struct-body ;opt |
43 |
struct-modifiers: |
44 |
struct-modifier |
45 |
struct-modifiers struct-modifier |
454
Annex A Grammar
1 |
struct-modifier: |
2 |
new |
3 |
public |
4 |
protected |
5 |
internal |
6private
7struct-interfaces:
8: interface-type-list
9struct-body:
10{ struct-member-declarationsopt }
11struct-member-declarations:
12 |
struct-member-declaration |
13 |
struct-member-declarations struct-member-declaration |
14 |
struct-member-declaration: |
15 |
constant-declaration |
16 |
field-declaration |
17 |
method-declaration |
18 |
property-declaration |
19 |
event-declaration |
20 |
indexer-declaration |
21 |
operator-declaration |
22 |
constructor-declaration |
23 |
static-constructor-declaration |
24 |
type-declaration |
25A.2.8 Arrays
26array-type:
27 |
non-array-type rank-specifiers |
28 |
non-array-type: |
29 |
type |
30 |
rank-specifiers: |
31 |
rank-specifier |
32 |
rank-specifiers rank-specifier |
33 |
rank-specifier: |
34 |
[ dim-separatorsopt ] |
35 |
dim-separators: |
36 |
, |
37 |
dim-separators , |
38 |
array-initializer: |
39 |
{ variable-initializer-listopt } |
40 |
{ variable-initializer-list , } |
41 |
variable-initializer-list: |
42 |
variable-initializer |
43 |
variable-initializer-list , variable-initializer |
44 |
variable-initializer: |
45 |
expression |
46 |
array-initializer |
455
C# LANGUAGE SPECIFICATION
1A.2.9 Interfaces
2interface-declaration:
3 |
attributesopt interface-modifiersopt partialopt interface identifier type-parameter-listopt |
4 |
interface-baseopt type-parameter-constraints-clausesopt interface-body ;opt |
5 |
interface-modifiers: |
6 |
interface-modifier |
7 |
interface-modifiers interface-modifier |
8 |
interface-modifier: |
9 |
new |
10 |
public |
11 |
protected |
12 |
internal |
13private
14interface-base:
15: interface-type-list
16interface-body:
17{ interface-member-declarationsopt }
18interface-member-declarations:
19 |
interface-member-declaration |
|
||
20 |
interface-member-declarations interface-member-declaration |
|||
21 |
interface-member-declaration: |
|
||
22 |
interface-method-declaration |
|
||
23 |
interface-property-declaration |
|
||
24 |
interface-event-declaration |
|
||
25 |
interface-indexer-declaration |
|
||
26 |
interface-method-declaration: |
|
||
27 |
attributesopt |
newopt return-type |
identifier type-parameter-listopt |
|
28 |
( formal-parameter-listopt ) type-parameter-constraints-clausesopt ; |
|||
29 |
interface-property-declaration: |
|
||
30 |
attributesopt newopt type identifier { interface-accessors } |
|||
31 |
interface-accessors: |
|
|
|
32 |
attributesopt |
get |
; |
|
33 |
attributesopt |
set |
; |
|
34 |
attributesopt get ; attributesopt set ; |
|||
35 |
attributesopt set ; attributesopt get ; |
|||
36 |
interface-event-declaration: |
|
||
37 |
attributesopt newopt event type identifier ; |
|||
38 |
interface-indexer-declaration: |
|
||
39 |
attributesopt |
newopt type this |
[ formal-parameter-list ] { interface-accessors } |
|
40A.2.10 Enums
41enum-declaration:
42 |
attributesopt enum-modifiersopt enum identifier enum-baseopt enum-body ;opt |
43 enum-base:
44: integral-type
45enum-body:
46 |
{ |
enum-member-declarationsopt } |
47 |
{ |
enum-member-declarations , } |
456
Annex A Grammar
1 |
enum-modifiers: |
2 |
enum-modifier |
3 |
enum-modifiers enum-modifier |
4 |
enum-modifier: |
5 |
new |
6 |
public |
7 |
protected |
8 |
internal |
9private
10enum-member-declarations:
11 |
enum-member-declaration |
|
12 |
enum-member-declarations , enum-member-declaration |
|
13 |
enum-member-declaration: |
|
14 |
attributesopt |
identifier |
15 |
attributesopt |
identifier = constant-expression |
16A.2.11 Delegates
17delegate-declaration:
18 |
attributesopt delegate-modifiersopt delegate return-type identifier type-parameter-listopt |
19 |
( formal-parameter-listopt ) type-parameter-constraints-clausesopt ; |
20 |
delegate-modifiers: |
21 |
delegate-modifier |
22 |
delegate-modifiers delegate-modifier |
23 |
delegate-modifier: |
24 |
new |
25 |
public |
26 |
protected |
27 |
internal |
28private
29A.2.12 Attributes
30global-attributes:
31 |
global-attribute-sections |
32 |
global-attribute-sections: |
33 |
global-attribute-section |
34 |
global-attribute-sections global-attribute-section |
35 |
global-attribute-section: |
36 |
[ global-attribute-target-specifier attribute-list ] |
37 |
[ global-attribute-target-specifier attribute-list , ] |
38 |
global-attribute-target-specifier: |
39 |
global-attribute-target : |
40 |
global-attribute-target: |
41 |
identifier |
42 |
keyword |
43 |
attributes: |
44 |
attribute-sections |
45 |
attribute-sections: |
46 |
attribute-section |
47 |
attribute-sections attribute-section |
457
