5

在 C# 4 中,没有beforefieldinit标志的类型的行为发生了变化,因此现在类型初始化程序可以在首次使用类的任何静态字段之前调用。

我的问题是为什么 C#/.NET 团队改变了这种行为?主要原因是什么?你能举出任何实际例子来说明这种变化是有意义的吗?

4

1 回答 1

11

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

怀疑JIT 团队设法找到一种方法让它变得懒惰而不会降低性能……或者它可能有助于其他地方的性能。这很可能只是.NET 4 CLR 与 .NET 2 CLR 中的一种行为变化……碰巧我注意到了,但我怀疑很多其他人也注意到了。我认为 JIT 团队在记录的保证范围内按照他们认为合适的方式进行调整是完全合理的。

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

于 2011-07-18T07:42:59.973 回答