从C# 8 开始,本地方法就可以是静态的了。
与其他的本地方法不同,静态的本地方法无法捕获任何本地状态量。
直接看例子:
这段代码里有两个本地方法,他们分别对实例的一个字段和方法里的一个本地变量进行了修改操作,也就是捕获并更新了本地的状态。
其运行结果是:
可以看到类的成员字段和方法本地变量的状态都被这两个本地方法修改了。。
避免实例状态被修改
但是很多情况下,你并不希望类的实例字段和方法本地变量的值被捕获或修改。在C# 8里面,你可以使用静态本地方法来达到这个目的。
其做法很简单,就是在原来这两个本地方法前面加上static关键字即可:
可以看到程序报错了,这是因为静态本地方法是不可以访问和捕获实例的状态的,包括实例成员和方法本地变量。
针对第一个本地方法,我直接把更新本地变量的语句去掉:
而针对第二个本地方法,如果你真的想修改实例成员的状态,那么就需要把成员改为静态的:
其运行结果是:
优点
C# 8的这个特性对可读性其实没有特别大的帮助,但是它却可以防止本地方法捕获实例状态,在一些情况下,这对性能有很大的帮助。
更详细教程请点击原文链接。