C# Language Specification
===========================

__Version 6__

This is an unofficial draft, posted here for convenience. When we submit a C# 6.0 spec proposal to ECMA, it will be shared here.

<!--
(This document is also available for download: [csharp.pdf](CSharp%20Language%20Specification.pdf?raw=true) and [csharp.docx](CSharp%20Language%20Specification.docx?raw=true))
-->

* [Introduction](introduction.md)
    * [Hello world](introduction.md#hello-world)
    * [Program structure](introduction.md#program-structure)
    * [Types and variables](introduction.md#types-and-variables)
    * [Expressions](introduction.md#expressions)
    * [Statements](introduction.md#statements)
    * [Classes and objects](introduction.md#classes-and-objects)
* [Lexical structure](lexical-structure.md)
    * [Programs](lexical-structure.md#programs)
    * [Grammars](lexical-structure.md#grammars)
    * [Lexical analysis](lexical-structure.md#lexical-analysis)
    * [Tokens](lexical-structure.md#tokens)
    * [Pre-processing directives](lexical-structure.md#pre-processing-directives)
* [Basic concepts](basic-concepts.md)
    * [Application Startup](basic-concepts.md#application-startup)
    * [Application termination](basic-concepts.md#application-termination)
    * [Declarations](basic-concepts.md#declarations)
    * [Members](basic-concepts.md#members)
    * [Member access](basic-concepts.md#member-access)
    * [Signatures and overloading](basic-concepts.md#signatures-and-overloading)
    * [Scopes](basic-concepts.md#scopes)
    * [Namespace and type names](basic-concepts.md#namespace-and-type-names)
    * [Automatic memory management](basic-concepts.md#automatic-memory-management)
    * [Execution order](basic-concepts.md#execution-order)
* [Types](types.md)
    * [Value types](types.md#value-types)
    * [Reference types](types.md#reference-types)
    * [Boxing and unboxing](types.md#boxing-and-unboxing)
    * [Constructed types](types.md#constructed-types)
    * [Type parameters](types.md#type-parameters)
    * [Expression tree types](types.md#expression-tree-types)
    * [The dynamic type](types.md#the-dynamic-type)
* [Variables](variables.md)
    * [Variable categories](variables.md#variable-categories)
    * [Default values](variables.md#default-values)
    * [Definite assignment](variables.md#definite-assignment)
    * [Variable references](variables.md#variable-references)
    * [Atomicity of variable references](variables.md#atomicity-of-variable-references)
* [Conversions](conversions.md)
    * [Implicit conversions](conversions.md#implicit-conversions)
    * [Explicit conversions](conversions.md#explicit-conversions)
    * [Standard conversions](conversions.md#standard-conversions)
    * [User-defined conversions](conversions.md#user-defined-conversions)
    * [Anonymous function conversions](conversions.md#anonymous-function-conversions)
    * [Method group conversions](conversions.md#method-group-conversions)
* [Expressions](expressions.md)
    * [Expression classifications](expressions.md#expression-classification)
    * [Static and Dynamic Binding](expressions.md#static-and-dynamic-binding)
    * [Operators](expressions.md#operators)
    * [Member lookup](expressions.md#member-lookup)
    * [Function members](expressions.md#function-members)
    * [Primary expressions](expressions.md#primary-expressions)
    * [Unary operators](expressions.md#unary-operators)
    * [Arithmetic operators](expressions.md#arithmetic-operators)
    * [Shift operators](expressions.md#shift-operators)
    * [Relational and type-testing operators](expressions.md#relational-and-type-testing-operators)
    * [Logical operators](expressions.md#logical-operators)
    * [Conditional logical operators](expressions.md#conditional-logical-operators)
    * [The null coalescing operator](expressions.md#the-null-coalescing-operator)
    * [Conditional operator](expressions.md#conditional-operator)
    * [Anonymous function expressions](expressions.md#anonymous-function-expressions)
    * [Query expressions](expressions.md#query-expressions)
    * [Assignment operators](expressions.md#assignment-operators)
    * [Expression](expressions.md#expression)
    * [Constant expressions](expressions.md#constant-expressions)
    * [Boolean expressions](expressions.md#boolean-expressions)
* [Statements](statements.md)
    * [End points and reachability](statements.md#end-points-and-reachability)
    * [Blocks](statements.md#blocks)
    * [The empty statement](statements.md#the-empty-statement)
    * [Labeled statements](statements.md#labeled-statements)
    * [Declaration statements](statements.md#declaration-statements)
    * [Expression statements](statements.md#expression-statements)
    * [Selection statements](statements.md#selection-statements)
    * [Iteration statements](statements.md#iteration-statements)
    * [Jump statements](statements.md#jump-statements)
    * [The try statement](statements.md#the-try-statement)
    * [The checked and unchecked statements](statements.md#the-checked-and-unchecked-statements)
    * [The lock statement](statements.md#the-lock-statement)
    * [The using statement](statements.md#the-using-statement)
    * [The yield statement](statements.md#the-yield-statement)
* [Namespaces](namespaces.md)
    * [Compilation units](namespaces.md#compilation-units)
    * [Namespace declarations](namespaces.md#namespace-declarations)
    * [Extern aliases](namespaces.md#extern-aliases)
    * [Using directives](namespaces.md#using-directives)
    * [Namespace members](namespaces.md#namespace-members)
    * [Type declarations](namespaces.md#type-declarations)
    * [Namespace alias qualifiers](namespaces.md#namespace-alias-qualifiers)
* [Classes](classes.md)
    * [Class declarations](classes.md#class-declarations)
    * [Partial types](classes.md#partial-types)
    * [Class members](classes.md#class-members)
    * [Constants](classes.md#constants)
    * [Fields](classes.md#fields)
    * [Methods](classes.md#methods)
    * [Properties](classes.md#properties)
    * [Events](classes.md#events)
    * [Indexers](classes.md#indexers)
    * [Operators](classes.md#operators)
    * [Instance constructors](classes.md#instance-constructors)
    * [Static constructors](classes.md#static-constructors)
    * [Destructors](classes.md#destructors)
    * [Iterators](classes.md#iterators)
    * [Async functions](classes.md#async-functions)
* [Structs](structs.md)
    * [Struct declarations](structs.md#struct-declarations)
    * [Struct members](structs.md#struct-members)
    * [Class and struct differences](structs.md#class-and-struct-differences)
    * [Struct examples](structs.md#struct-examples)
* [Arrays](arrays.md)
    * [Array types](arrays.md#array-types)
    * [Array creation](arrays.md#array-creation)
    * [Array element access](arrays.md#array-element-access)
    * [Array members](arrays.md#array-members)
    * [Array covariance](arrays.md#array-covariance)
    * [Array initializers](arrays.md#array-initializers)
* [Interfaces](interfaces.md)
    * [Interface declarations](interfaces.md#interface-declarations)
    * [Interface members](interfaces.md#interface-members)
    * [Fully qualified interface member names](interfaces.md#fully-qualified-interface-member-names)
    * [Interface implementations](interfaces.md#interface-implementations)
* [Enums](enums.md)
    * [Enum declarations](enums.md#enum-declarations)
    * [Enum modifiers](enums.md#enum-modifiers)
    * [Enum members](enums.md#enum-members)
    * [The System.Enum type](enums.md#the-systemenum-type)
    * [Enum values and operations](enums.md#enum-values-and-operations)
* [Delegates](delegates.md)
    * [Delegate declarations](delegates.md#delegate-declarations)
    * [Delegate compatibility](delegates.md#delegate-compatibility)
    * [Delegate instantiation](delegates.md#delegate-instantiation)
    * [Delegate invocation](delegates.md#delegate-invocation)
* [Exceptions](exceptions.md)
    * [Causes of exceptions](exceptions.md#causes-of-exceptions)
    * [The System.Exception class](exceptions.md#the-systemexception-class)
    * [How exceptions are handled](exceptions.md#how-exceptions-are-handled)
    * [Common Exception Classes](exceptions.md#common-exception-classes)
* [Attributes](attributes.md)
    * [Attribute classes](attributes.md#attribute-classes)
    * [Attribute specification](attributes.md#attribute-specification)
    * [Attribute instances](attributes.md#attribute-instances)
    * [Reserved attributes](attributes.md#reserved-attributes)
    * [Attributes for Interoperation](attributes.md#attributes-for-interoperation)
* [Unsafe code](unsafe-code.md)
    * [Unsafe contexts](unsafe-code.md#unsafe-contexts)
    * [Pointer types](unsafe-code.md#pointer-types)
    * [Fixed and moveable variables](unsafe-code.md#fixed-and-moveable-variables)
    * [Pointer conversions](unsafe-code.md#pointer-conversions)
    * [Pointers in expressions](unsafe-code.md#pointers-in-expressions)
    * [The fixed statement](unsafe-code.md#the-fixed-statement)
    * [Fixed size buffers](unsafe-code.md#fixed-size-buffers)
    * [Stack allocation](unsafe-code.md#stack-allocation)
    * [Dynamic memory allocation](unsafe-code.md#dynamic-memory-allocation)
* [Documentation comments](documentation-comments.md)
    * [Introduction](documentation-comments.md#introduction)
    * [Recommended tags](documentation-comments.md#recommended-tags)
    * [Processing the documentation file](documentation-comments.md#processing-the-documentation-file)
    * [An example](documentation-comments.md#an-example)

<!--
* Grammar: [csharp.html](http://ljw1004.github.io/csharpspec/csharp.html). Or download in ANTLR format: [csharp.g4](csharp.g4?raw=true). 
-->
