KyouyamaKazusa0805 / CSharpLearning

一个给初学者创建的 C# 语法教程视频的对应代码。
MIT License
16 stars 3 forks source link

【计划】C# 新语法介绍计划 #1

Open KyouyamaKazusa0805 opened 2 years ago

KyouyamaKazusa0805 commented 2 years ago

本 issue 作为 To-do 列表使用,呈现出所有我们需要讲解的 C# 的新的语法的用法。

C# 6 语法

语法名 英文术语 备注
静态引入类型 Import of Static Type Members into Namespace
异常筛选 Exception Filters catch when 从句
允许 catchfinally 块里使用 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 EnumDelegateunmanaged 泛型约束 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 foreachawait 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 andornot
用于 switch 语句的类型模式 Type Patterns on switch Statements case T _ 改成 case T
底层变长整数类型 Native-sized Integers nintnuint
函数指针 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 u8U8 后缀定义 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 关键字