4. History of C# – Version 1.0 & 1.2 – The
beginning
• Classes
• Structs
• Interfaces
• Events
• Properties
• Delegates
• Expressions
• Statements
• Attributes
• Literals
5. • Generics
• Partial types
• Anonymous methods
• Nullable types
• Iterators
• Covariance and contravariance
History of C# – Version 2.0 – Generics
6. • Auto-implemented properties
• Anonymous types
• Query expressions
• Lambda expressions
• Expression trees
• Extension methods
• Implicitly typed local variables
• Partial methods
• Object and collection initializers
History of C# – Version 3.0 – LinQ
7. History of C# – Version 4.0 – Dynamic
• Dynamic binding
• Named/optional arguments
• Generic covariant and contravariant
• Embedded interop types
8. History of C# – Version 5.0 – Async
• Asynchronous members
• Caller info attributes
9. History of C# – Version 6.0 – More
productive
• Static imports
• Exception filters
• Auto-property initializers
• Expression bodied members
• Null propagator
• String interpolation
• nameof operator
• Index initializers
10. History of C# – Version 7.0 – Pattern
matching
• Out variables
• Tuples and deconstruction
• Pattern matching
• Local functions
• Expanded expression bodied members
• Ref locals and returns
• Discards
• Binary Literals and Digit Separators
• Throw expressions
11. History of C# – Version 7.1 – More Pattern
• async Main method
• default literal expressions
• Inferred tuple element names
• Pattern matching on generic type parameters
12. History of C# – Version 7.2 – Efficient
value types
• Techniques for writing safe efficient code
• Non-trailing named arguments
• Leading underscores in numeric literals
• private protected access modifier
• Conditional ref expressions
13. History of C# – Version 7.3
Performance for safe code
• Indexing fixed fields does not
require pinning
• ref local variables may be
reassigned
• stackalloc arrays support
initializers
• More types support the fixed
statement
• Enhanced generic constraints
Enhancement
• Tuples support == and !=
• Attach attributes to the backing
fields for auto-implemented
properties
• in method overload resolution
tiebreaker
• Extend expression variables in
initializers
• Improved overload candidates
14. History of C# – Version 8.0 – More
features
• Readonly Members
• Default interface members
• Nullable reference types
• Asynchronous streams
• Indices and ranges
• Pattern matching enhancements:
• Switch expressions
• Property patterns
• Tuple patterns
• Positional patterns
• Using declarations
• Static local functions
• Disposable ref structs
• Null-coalescing assignment
• Unmanaged constructed types
• Stackalloc in nested expressions
• Enhancement of interpolated
verbatim strings
C# 1.0 - January 2002 - .NET Framework 1.0 – Visual Studio 2002
C# 1.1 & 1.2 – April 2003 - .NET Framework 1.1 – Visual Studio 2003
C# 2.0 – November 2005 - .NET Framework 2.0 – Visual Studio 2005
C# 3.0 – Novembre 2007 - .NET Framework 3.0 & 3.5 – Visual Studio 2008
C# 4.0 – April 2010 - .NET Framework 4.0 – Visual Studio 2010
C# 5.0 – August 2012 - .NET Framework 4.5 – Visual Studio 2012 & 2013
C# 6.0 – July 2015 - .NET Framework 4.6 – Visual Studio 2015
Await in catch/finally block
Default values for getter-only properties
Roslyn the compiler as a service
The C# compiler is now written in C#
C# 7.0 – March 2017 - .NET Framework 4.6.2 – Visual Studio 2017
C# 7.1 – August 2017- .NET Framework 4.7 – Visual Studio 2017 version 15.3
C# 7.2 – November 2017- .NET Framework 4.7.1 – Visual Studio 2017 version 15.5
C# 7.3 – May 2018- .NET Framework 4.7.2 – Visual Studio 2017 version 15.7
C# 7.2 – April 2019- .NET Framework 4.7.1 – Visual Studio 2017 version 15.5