博文

使用 ref 参数或者in参数的扩展方法(C# 7.2)

在C# 7.2之前,任何扩展方法的第一个参数都必须是值参数。C# 7.2取消了这项限制,于是 ref 相关语义应用得更彻底了。

将结构体声明为只读(C# 7.2)

in 参数的主要作用是减少对结构体的复制从而提升性能。听起来很不错,但是关于C#,还有一个隐蔽的阻碍,需要格外小心。本节首先明确问题,然后介绍C# 7.2是如何解决它的。

in 参数(C# 7.2)

C# 7.2为方法参数引入了新修饰符 in 。该修饰符的使用方式与 ref 、 out 相同,但目的不同。一个带有 in 修饰符的参数,可以通过引用传递从而避免复制,同时可以保证参数值不被修改。在方法内部, in 参数的行为类似于 ref readonly 局部变量。该变量依然是由调用方传入的一个内存地址,因此要保证方法不会修改该值,否则修改结果会影响调用方,这样就违背了 in 参数的意义。

C# ref 局部变量和 ref return

图片
C# 7中 ref 的很多相关特性是相互关联的。如果逐个介绍,很难体现出这些特性的优势。在描述这些特性时,给出的代码示例也会比一般例子看起来更刻意,旨在一次只展示一个特性点。下面介绍C# 7.0引入的两个特性,二者在C# 7.2中有所增强。首先介绍 ref 局部变量。

C# 回顾:ref 知多少

图片
要理解C# 7的 ref 特性,需要认真回顾C# 6以前版本中 ref 参数的工作原理,首先是变量和值之间的区别。