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

weq*_*w q 5 .net c# clr .net-4.0 clr4.0

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

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

Jon*_*eet 12

该行为一直是一个什么样的界限内记录 -它只是它被.NET 4的渴望慵懒的改变.

怀疑 JIT团队设法找到了一种让它变得懒惰而没有性能损失的方法......或者它可能有助于其他地方的表现.这可能只是.NET 4 CLR与.NET 2 CLR中行为的一种变化......它发生了我注意到它,但我怀疑很多其他人都这样做了.我认为JIT团队在记录的保证范围内调整他们认为合适的东西是完全合理的.

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