C# Language Design
C# Language Specification
Standard ECMA-334
- 2002.12,包含C# 1.0,C# 1.1,C# 1.2。
- 2006.06,包含C# 2.0。
- 2017.12,C# 5.0版本,最新版本。
Microsoft
Version |
Date |
.NET Framework |
CLR |
Visual Studio |
C# 1.0 |
2002.01 |
.NET Framework 1.0 |
1.0 |
VS 2002 |
C# 1.1 C# 1.2 |
2003.10 |
.NET Framework 1.1 |
1.1 |
VS 2003 |
C# 2.0 |
2005.11 |
.NET Framework 2.0 |
2.0 |
VS 2005 |
C# 3.0 |
2007.11 |
.NET Framework 2.0 .NET Framework 3.0 .NET Framework 3.5 |
2.0 |
VS 2008 VS 2010 |
C# 4.0 |
2010.04 |
.NET Framework 4 |
4.0 |
VS 2010 |
C# 5.0 |
2012.08 |
.NET Framework 4.5 .NET Framework 4.5.1 |
4.0 |
VS 2012 VS 2013 |
C# 6.0 |
2015.07 |
.NET Framework 4.6 |
4.0 |
VS 2015 |
C# 7.0 |
2017.03 |
.NET Framework 4.6.2 |
4.0 |
VS 2017 |
C# 7.1 |
2017.08 |
.NET Framework 4.7 |
4.0 |
VS 2017 v15.3 |
C# 7.2 |
2017.11 |
.NET Framework 4.7.1 |
4.0 |
VS 2017 v15.5 |
C# 7.3 |
2018.05 |
.NET Framework 4.7.2 |
4.0 |
VS 2017 v15.7 |
C# 8.0 |
2019.10 |
.NET Framework 4.8 |
4.0 |
VS 2019 v16.3 |
C# Language Feature
C# 1.0 - Visual Studio .NET 2002
C# 1.2 - Visual Studio .NET 2003
C# 2.0 - Visual Studio 2005
C# 3.0 - Visual Studio 2008
C# 4.0 - Visual Studio 2010
C# 5.0 - Visual Studio 2012
C# 6.0 - Visual Studio 2015
C# 7.0 - Visual Studio 2017
C# 7.1 - Visual Studio 2017 version 15.3
C# 7.2 - Visual Studio 2017 version 15.5
C# 7.3 - Visual Studio 2017 version 15.7
C# 8.0 - .NET Core 3.0 and Visual Studio 2019 version 16.3
-
Nullable reference types: express nullability intent on reference types with
? , notnull constraint and annotations attributes in APIs, the compiler will use those to try and detect possible null values 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 foreach and await using allow for asynchronous enumeration and disposal of IAsyncEnumerable collections and IAsyncDisposable resources, and async-iterator methods allow convenient implementation of such asynchronous streams.
-
Enhanced using: a
using declaration is added with an implicit scope and using statements and declarations allow disposal of ref structs using a pattern.
-
Ranges and indexes: the
i..j syntax allows constructing System.Range instances, the ^k syntax allows constructing System.Index instances, 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
static cannot capture this or 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
unmanaged constraint).
-
Readonly members: individual members can now be marked as
readonly to indicate and enforce that they do not modify instance state.
-
Stackalloc in nested contexts:
stackalloc expressions 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 null on unconstrained type parameter
C# 9.0
- Records and Pattern-based With-Expression:Records是一种轻量级的不可变类型。
- Type Classes:Type Classes允许您在类型上添加一组操作,但不实现它。
- Dictionary Literals:字典字面量。
- Params Span<T>:允许用params修饰Span<T>。
- Allow no-arg constructor and field initializers in struct declarations:结构体允许使用无参构造函数。
- Native-Sized Number Types:原生大小的数字类型(nint,nuint,nfloat等)'n'表示
native(原生) ,该特性允许声明一个32位或64位的数据类型,这取决于操作系统的平台类型。
- Fixed Sized Buffers:固定大小的缓冲区。
- Uft8 string literals:新的字符串类型UTF8String。
- Base(T):解决默认接口方法中的覆盖冲突问题。
Reference
|
请发表评论