为什么.NET 4中的BeforeFieldInit行为发生了变化?

时间:2011-07-18 07:31:28

标签: c# .net .net-4.0 clr clr4.0

在C#4中,没有beforefieldinit标志的类型的行为被改变了,所以现在类型初始化器可以在第一次使用类的任何静态字段之前调用。

我的问题是为什么C#/ .NET团队改变了这种行为?主要原因是什么?你能展示一下这个改变有意义的实际例子吗?

1 个答案:

答案 0 :(得分:11)

行为一直在记录的范围内 - 它只是在.NET 4中从渴望变为懒惰。

怀疑 JIT团队设法找到了一种让它变得懒惰而没有性能损失的方法......或者它可能有助于其他地方的表现。这可能只是一个这样的.NET 4 CLR与.NET 2 CLR之间的行为改变......它发生了我注意到它,但我怀疑很多其他人做了。我认为JIT团队在记录的保证范围内根据自己的意愿调整事情是完全合理的。

最终,如果这会导致您的代码失败,那么您已经有了一个错误。