C#7.2 新增功能
- 2019 年 10 月 4 日
- 筆記
系列目录 【已更新最新开发文章,点击查看详细】
C# 7.2 又是一个单点版本,它增添了大量有用的功能。 此版本的一项主要功能是避免不必要的复制或分配,进而更有效地处理值类型。
C# 7.2 使用语言版本选择配置元素来选择编译器语言版本。
01 安全高效的代码的增强功能
利用 7.2 中引入的语言功能,可在使用引用语义时处理值类型。 它们旨在尽量减少值类型的复制,而不造成与引用类型使用相关的内存分配,进而提升性能。 功能包括:
- 针对实参的
in
修饰符,指定形参通过引用传递,但不通过调用方法修改。 将in
修饰符添加到参数是源兼容的更改。 - 针对方法返回的
ref readonly
修饰符,指示方法通过引用返回其值,但不允许写入该对象。 如果向某个值赋予返回值,则添加ref readonly
修饰符是源兼容的更改。 将readonly
修饰符添加到现有的ref
返回语句是不兼容的更改。 它要求调用方更新ref
本地变量的声明以包含readonly
修饰符。 readonly struct
声明,指示结构不可变,且应作为in
参数传递到其成员方法。 将readonly
修饰符添加到现有的结构声明是二进制兼容的更改。ref struct
声明,指示结构类型直接访问托管的内存,且必须始终分配有堆栈。 将ref
修饰符添加到现有struct
声明是不兼容的更改。ref struct
不能是类的成员,也不能用于可能在堆上分配的其他位置。
可以在编写安全高效的代码中详细了解所有这些更改。
02 非尾随命名参数
方法调用现可使用位于位置参数前面的命名参数(若这些命名参数的位置正确)。 有关详细信息,请参阅命名参数和可选参数。
03 数值文字中的前导下划线
C# 7.0 中实现了对数字分隔符的支持,但这不允许文字值的第一个字符是 _
。 十六进制文本和二进制文件现可以 _
开头。例如:
int binaryValue = 0b_0101_0101;
04 private protected 访问修饰符
新的复合访问修饰符:private protected
指示可通过包含同一程序集中声明的类或派生类来访问成员。 虽然 protected internal
允许通过同一程序集中的类或派生类进行访问,但 private protected
限制对同一程序集中声明的派生类的访问。
有关详细信息,请参阅语言参考中的访问修饰符。
05 条件 ref 表达式
条件表达式可能生成 ref 结果而不是值。 例如,你将编写以下内容以检索对两个数组之一中第一个元素的引用:
ref var r = ref (arr != null ? ref arr[0] : ref otherArr[0]);
变量 r
是对 arr
或 otherArr
中第一个值的引用。
有关详细信息,请参阅语言参考中的条件运算符 (?:)。
系列目录 【已更新最新开发文章,点击查看详细】