本 issue 作为 To-do 列表使用,呈现出所有我们需要讲解的 C# 的新的语法的用法。
- [ ] 类型或成员声明语法扩展
- [x] 类型语法扩展
- [x] 综合类型
- [x] C# 2 之泛型(067-072)
- [x] C# 4 之接口和委托泛型参数的协变性和逆变性(116)
- [x] C# 2 之分部类型(080)
- [x] 鸭子类型语法
- [x] C# 3 之查询表达式(097-113)
- [x] C# 4 之动态绑定(114-115)
- [x] 类类型扩展
- [x] 委托类型扩展
- [x] C# 2 之匿名函数(073-075)
- [x] C# 2 之方法组转委托(076)
- [x] C# 2 之委托逆变参数和协变返回(077)
- [x] C# 3 之 Lambda 表达式(094)
- [x] 指针类型扩展
- [x] 命名空间语法扩展
- [x] C# 2 之类型和命名空间别名(078)
- [x] C# 2 之外部别名(079)
- [x] 属性语法扩展
- [x] C# 2 之访问器上的访问修饰符(085)
- [x] C# 3 之自动属性(092)
- [ ] 方法语法扩展
- [x] C# 3 之分部方法(095)
- [x] C# 3 之扩展方法(096)
- [x] C# 4 之命名和可选参数(117)
- [ ] C# 5 之调用方信息特性
- [x] 语句语法扩展
- [x] C# 2 之迭代器语句(082-083)
- [x] C# 2 之
bool 类型实例的 switch 语句用法(084)
- [x] C# 2 之
#pragma warning 警告禁用指令(086)
- [x] C# 3 之隐式变量类型声明(088)
- [ ] 表达式语法扩展
- [x] 初始化器语法
- [x] C# 3 之隐式数组变量类型的初始化器(089)
- [x] C# 3 之对象初始化器(090)
- [x] C# 3 之集合初始化器(091)
- [ ] 其它表达式
- [x] C# 3 之匿名类型表达式(093)
- [ ] C# 5 之异步方法(118-)
- [x] 118 C# 5 之异步方法(一):初见
Task
- [ ] 爆破性修改
- [ ] C# 5 之
foreach 循环迭代变量的行为修改
- [x] 其它零碎语法
C# 6 语法
| 语法名 |
英文术语 |
备注 |
| 静态引入类型 |
Import of Static Type Members into Namespace |
|
| 异常筛选 |
Exception Filters |
catch when 从句 |
允许 catch 和 finally 块里使用 await 语句 |
Await in catch/finally Blocks |
|
| 自动属性的初始化器 |
Auto Property Initializers |
|
| 自动只读属性的初始化器 |
Default Values for Getter-only Properties |
|
| 表达式化的方法和只读属性声明 |
Expression-bodied Read-only Properties & Methods |
|
null 条件和 null 传播运算符 |
Null Propagator & Null-conditional Operator |
??、?. 和 ?[] |
| 内插字符串 |
String Interpolation |
|
nameof 表达式 |
nameof Operator |
|
| 字典初始化器 |
Dictionary Initializer |
|
C# 7 语法
C# 7 版本的语法发布情况比较特殊,分为 C# 7.0、C# 7.1、C# 7.2 和 C# 7.3 四个小版本。一般我们不区分大版本和小版本,但因为 C# 7.0 情况的特殊性,我把特性全部按照小版本分组列出来。
| 版本 |
语法名 |
英文术语 |
备注 |
| 7.0 |
out 变量内联声明 |
out Variables |
|
|
模式匹配 |
Pattern Matching |
|
|
值元组 |
Value Tuples |
|
|
解构 |
Deconstruction |
|
|
弃元 |
Discards |
|
|
本地函数 |
Local Functions |
|
|
二进制字面量 |
Binary Literals |
|
|
数字分隔符 |
Digit Separators |
|
|
ref 返回值和临时变量 |
ref Returns & Locals |
|
|
广义化的异步返回类型 |
Generalized async Return Types |
|
|
其余成员的表达式化声明 |
More Expression-bodied Members |
|
|
throw 表达式 |
throw Expressions |
|
| 7.1 |
async 主方法 |
async Main |
|
|
default 隐式类型表达式 |
default Expressions |
|
|
值元组元素名称推断 |
Inferred Tuple Element Names |
|
|
泛型可用的模式匹配 |
Pattern-matching with Generics |
T is |
| 7.2 |
ref struct 类型 |
Span and ref-like Types |
|
|
in 参数和 readonly 引用 |
in Parameters & readonly References |
|
|
ref 条件表达式 |
ref Conditional |
|
|
不必放在尾部的命名参数 |
Non-trailing Named Arguments |
|
|
private protected 访问级别 |
private protected Accessibility |
|
|
允许字面量前缀后插入数字分隔符 |
Digit Separators after Base Specifiers |
|
| 7.3 |
Enum、Delegate 和 unmanaged 泛型约束 |
Enum, Delegate & unmanaged Constraints |
|
|
ref 临时变量的重新赋值 |
ref Locals Re-assignment |
|
|
stackalloc 初始化器 |
stackalloc Initializers |
|
|
固定缓冲 |
Indexing Movable fixed Buffers |
|
|
自定义 fixed 语句固定对象 |
Custom fixed Statement |
|
|
可用于初始化器和查询表达式里的表达式变量 |
Expression Variables in Initializers & Queries |
|
|
值元组比较功能 |
Tuple Comparison |
|
|
底层字段的特性目标 |
Attributes on Backing Fields |
|
C# 8 语法
| 语法名 |
英文术语 |
备注 |
| 可空引用类型 |
Nullable Reference Types |
|
| 默认接口成员 |
Default Interface Members |
|
| 递归模式 |
Recursive Patterns |
|
| 异步流 |
async Streams |
await foreach、await using |
using 变量声明增强 |
Enhanced using |
|
| 索引和范围表达式 |
Ranges & Indices |
|
null 合并赋值 |
null-coalescing Assignment |
??= |
| 静态本地函数 |
static Local Functions |
|
| 广义化非托管类型 |
Unmanaged Generic structs |
|
| 只读成员 |
readonly Members |
|
任何时候的 stackalloc 表达式 |
stackalloc in Nested Contexts |
|
| 可调整的原义内插字符串 |
Alternative Interpolated Verbatim Strings |
$@""、@$"" 均可 |
[Obsolete] 用于属性访问器 |
Obsolete on Property Accessors |
|
无约束泛型参数 is null 匹配 |
Permit t is null on Unconstrainted Type Parameter |
|
C# 9 语法
| 语法名 |
英文术语 |
备注 |
| 记录类型 |
records |
|
with 表达式 |
with Expressions |
|
| 只初始化赋值器 |
init-only Setters |
|
| 隐式主方法 |
Top-level Statements |
|
| 关系模式 |
Relational Patterns |
|
| 模式连词和括号模式 |
Pattern Combinators & Parenthesized Patterns |
and、or 和 not |
用于 switch 语句的类型模式 |
Type Patterns on switch Statements |
case T _ 改成 case T |
| 底层变长整数类型 |
Native-sized Integers |
nint 和 nuint |
| 函数指针 |
Function Pointers |
|
禁止发出 .localsinit 指令 |
Suppress Emitting .localsinit Flag |
[SkipLocalsInit] 特性的使用 |
隐式 new 表达式 |
Target-typed new Expressions |
|
| 静态匿名函数和 Lambda |
static Anonymous Functions & Lambdas |
|
| 基于目标类型的条件表达式 |
Target-typed Conditional Expressions |
该特性包含对内置类型转换的破坏性修改 |
| 协变返回 |
Covariant Return Types |
|
| Lambda 参数弃元 |
Lambda Discard Parameters |
|
| 适用于本地函数的特性 |
Attributes on Local Functions |
|
| 模块初始化器 |
Module Initializers |
[ModuleInitializer] 特性的使用 |
扩展 foreach 循环 |
Extension GetEnumerator |
|
| 分部方法增强 |
partial Methods with Returned Values |
|
| 源代码生成器 |
Source Generators |
|
| 无约束的泛型参数可空性 |
Unconstrainted Type Argument |
T? 和 default 泛型约束 |
C# 10 语法
| 语法名 |
英文术语 |
备注 |
| 记录结构类型 |
record structs |
|
基于任何结构的 with 表达式 |
with Expressions on structs |
|
| 增强可空性表达式分析 |
Improved Definite Assignment |
|
| 常量内插字符串 |
Constant Interpolated Strings |
|
| 拓展属性模式 |
Extended Property Patterns |
|
sealed record ToString |
sealed record ToString |
|
| 增量源代码生成器 |
Incremental Source Generators |
增强源代码生成器,以用于高性能场景下 |
| 混合解构 |
Mixed Deconstructions |
允许解构和变量定义混合在一起 |
用于方法级别的 [AsyncMethodBuilder] |
Method-level [AsyncMethodBuilder] |
|
#line 指令对列对齐的支持 |
#line Span Directive |
|
| Lambda 增强 |
Lambda Improvements |
|
| 自定义内插字符串处理器 |
Interpolated String Handlers |
|
| 基于文件范围的命名空间声明 |
File-Scoped Namespaces |
|
| 自定义结构的无参构造器 |
Parameterless struct Constructors |
|
| 调用方参数表达式特性 |
[CallerArgumentExpression] |
|
C# 11 语法
| 语法名 |
英文术语 |
备注 |
| 内插内换行 |
Newlines in Interpolations |
不再需要内插部分内换行原本必须加的 @ 记号 |
| 列表模式 |
List Patterns |
[_, ..]、[1, 2, 3] 之类的模式匹配规则 |
| 原始字符串字面量 |
Raw String Literals |
""" 以及更多双引号序列表示 |
| 泛型特性 |
Generic Attributes |
|
| 静态抽象成员 |
Static Abstract Members in Interfaces |
|
| 结构数据成员自动初始化 |
Auto-default Structures |
|
| 要求初始化成员 |
Required Members |
required 关键字 |
nameof 范围拓展 |
Extended Scope of nameof |
允许方法参数以及方法类型参数参与 nameof 使用 |
ref 字段 |
Ref Fields |
允许 ref struct 定义引用字段、scoped 关键字 |
| 允许指针操作用于托管类型 |
Managed Pointer Operations |
允许类似 string* p = &s; 的语法对托管类型使用指针 |
checked 运算符重载 |
Checked Operators |
允许区分部分运算符的算术安全性 |
| 无符号右移运算符 |
Unsigned Right Shift |
和 Java 一样的 >>> 和 >>>= 运算符 |
ReadOnlySpan<char> 匹配 |
Pattern Matching on ReadOnlySpan<char> |
使用模式匹配 ReadOnlySpan<char> 字符序列 |
| UTF-8 字符串 |
UTF-8 String Literals |
u8 或 U8 后缀定义 UTF8 编码的字符串 |
| 文件本地类型 |
File-Local Types |
file 关键字 |
| 将指针处理数字化 |
Numeric IntPtr |
|
C# 12 语法(动态更新)
| 语法名 |
英文术语 |
备注 |
| Lambda 可选参数 |
Lambda default parameters |
|
实例对象的 nameof 表达式 |
nameof accessing instance members |
|
Span<T> 可用 params 修饰符,及任何类型的 stackalloc 表达式 |
Params Span + Stackalloc any array type |
|
| 主构造器 |
Primary Constructors |
|
| 半自动属性 |
Semi-auto-implemented Properties |
field 关键字 |