C# 版本特性(1.0 - 9.0)详细介绍
时间:2020-02-29 11:08:19
收藏:0
阅读:352
C# Language Design
- 语言规范:https://github.com/dotnet/csharplang
- 最新特性:https://github.com/dotnet/roslyn/blob/master/docs/Language%20Feature%20Status.md
- 历史特性:https://github.com/dotnet/csharplang/blob/master/Language-Version-History.md
C# Language Specification
Standard ECMA-334
- December 2002,包含C# 1.0,C# 1.1,C# 1.2。
- June 2006,包含C# 2.0。
- December 2017,C# 5.0版本,最新版本。
- 除此之外其他版本(如C# 3.0,C#4.0,C#8.0等)未收入ECMA标准。
Microsoft
| Version | Date | .NET Framework | Visual Studio |
|---|---|---|---|
| C# 1.0 | 2002.01 | .NET Framework 1.0 | VS 2002 |
| C# 1.1 C# 1.2 |
2003.10 | .NET Framework 1.1 | VS 2003 |
| C# 2.0 | 2005.11 | .NET Framework 2.0 | VS 2005 |
| C# 3.0 | 2007.11 | .NET Framework 2.0 .NET Framework 3.0 .NET Framework 3.5 |
VS 2008 VS 2010 |
| C# 4.0 | 2010.04 | .NET Framework 4 | VS 2010 |
| C# 5.0 | 2012.08 | .NET Framework 4.5 | VS 2012 VS 2013 |
| C# 6.0 | 2015.07 | .NET Framework 4.6 | VS 2015 |
| C# 7.0 | 2017.03 | .NET Framework 4.6.2 | VS 2017 |
| C# 7.1 | 2017.08 | .NET Framework 4.7 | VS 2017 v15.3 |
| C# 7.2 | 2017.11 | .NET Framework 4.7.1 | VS 2017 v15.5 |
| C# 7.3 | 2018.05 | .NET Framework 4.7.2 | VS 2017 v15.7 |
| C# 8.0 | 2019.10 | .NET Framework 4.8 | VS 2019 v16.3 |
C# Language Feature
C# 1.0 - Visual Studio .NET 2002
- Classes
- Structs
- Interfaces
- Events
- Properties
- Delegates
- Expressions
- Statements
- Attributes
- Literals
C# 1.2 - Visual Studio .NET 2003
- Dispose in foreach
- foreach over string specialization
C# 2.0 - Visual Studio 2005
- Generics
- Partial types
- Anonymous methods
- Iterators
- Nullable types
- Getter/setter separate accessibility
- Method group conversions (delegates)
- Static classes
- Delegate inference
C# 3.0 - Visual Studio 2008
- Implicitly typed local variables
- Object and collection initializers
- Auto-Implemented properties
- Anonymous types
- Extension methods
- Query expressions
- Lambda expression
- Expression trees
- Partial methods
C# 4.0 - Visual Studio 2010
- Dynamic binding
- Named and optional arguments
- Co- and Contra-variance for generic delegates and interfaces
- Embedded interop types ("NoPIA")
C# 5.0 - Visual Studio 2012
- Asynchronous methods
- Caller info attributes
- foreach loop was changed to generates a new loop variable rather than closing over the same variable every time
C# 6.0 - Visual Studio 2015
- Draft Specification online
- Compiler-as-a-service (Roslyn)
- Import of static type members into namespace
- Exception filters
- Await in catch/finally blocks
- Auto property initializers
- Default values for getter-only properties
- Expression-bodied members
- Null propagator (null-conditional operator, succinct null checking)
- String interpolation
- nameof operator
- Dictionary initializer
C# 7.0 - Visual Studio 2017
- Out variables
- Pattern matching
- Tuples
- Deconstruction
- Discards
- Local Functions
- Binary Literals
- Digit Separators
- Ref returns and locals
- Generalized async return types
- More expression-bodied members
- Throw expressions
C# 7.1 - Visual Studio 2017 version 15.3
- Async main
- Default expressions
- Reference assemblies
- Inferred tuple element names
- Pattern-matching with generics
C# 7.2 - Visual Studio 2017 version 15.5
- Span and ref-like types
- In parameters and readonly references
- Ref conditional
- Non-trailing named arguments
- Private protected accessibility
- Digit separator after base specifier
C# 7.3 - Visual Studio 2017 version 15.7
System.Enum,System.Delegateandunmanagedconstraints.- Ref local re-assignment: Ref locals and ref parameters can now be reassigned with the ref assignment operator (
= ref). - Stackalloc initializers: Stack-allocated arrays can now be initialized, e.g.
Span x = stackalloc[] { 1, 2, 3 };. - Indexing movable fixed buffers: Fixed buffers can be indexed into without first being pinned.
- Custom
fixedstatement: Types that implement a suitableGetPinnableReferencecan be used in afixedstatement. - Improved overload candidates: Some overload resolution candidates can be ruled out early, thus reducing ambiguities.
- Expression variables in initializers and queries: Expression variables like
out varand pattern variables are allowed in field initializers, constructor initializers and LINQ queries. - Tuple comparison: Tuples can now be compared with
==and!=. - Attributes on backing fields: Allows
[field: …]attributes on an auto-implemented property to target its backing field.
C# 8.0 - .NET Core 3.0 and Visual Studio 2019 version 16.3
- Nullable reference types: express nullability intent on reference types with
?,notnullconstraint and annotations attributes in APIs, the compiler will use those to try and detect possiblenullvalues being dereferenced or passed to unsuitable APIs. - Default interface members: interfaces can now have members with default implementations, as well as static/private/protected/internal members except for state (ie. no fields).
- Recursive patterns: positional and property patterns allow testing deeper into an object, and switch expressions allow for testing multiple patterns and producing corresponding results in a compact fashion.
- Async streams:
await foreachandawait usingallow for asynchronous enumeration and disposal ofIAsyncEnumerablecollections andIAsyncDisposableresources, and async-iterator methods allow convenient implementation of such asynchronous streams. - Enhanced using: a
usingdeclaration is added with an implicit scope andusingstatements and declarations allow disposal ofrefstructs using a pattern. - Ranges and indexes: the
i..jsyntax allows constructingSystem.Rangeinstances, the^ksyntax allows constructingSystem.Indexinstances, and those can be used to index/slice collections. - Null-coalescing assignment:
??=allows conditionally assigning when the value is null. - Static local functions: local functions modified with
staticcannot capturethisor local variables, and local function parameters now shadow locals in parent scopes. - Unmanaged generic structs: generic struct types that only have unmanaged fields are now considered unmanaged (ie. they satisfy the
unmanagedconstraint). - Readonly members: individual members can now be marked as
readonlyto indicate and enforce that they do not modify instance state. - Stackalloc in nested contexts:
stackallocexpressions are now allowed in more expression contexts. - Alternative interpolated verbatim strings:
@$"..."strings are recognized as interpolated verbatim strings just like$@"...". - Obsolete on property accessors: property accessors can now be individually marked as obsolete.
- Permit
t is nullon unconstrained type parameter
C# 9.0
Reference
原文:https://www.cnblogs.com/zenronphy/p/12381738.html
评论(0)