c# - 为什么 BeforeFieldInit 行为在 .NET 4 中发生了变化?

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

在 C# 4 中,没有 beforefieldinit 标志的类型的行为已更改,因此现在可以在首次使用类的任何静态字段之前调用类型初始值设定项。

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

最佳答案

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

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

最终,如果这使您的代码失败,那么您已经遇到了错误。

关于c# - 为什么 BeforeFieldInit 行为在 .NET 4 中发生了变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6729841/

相关文章:

.net - 使用 native DLL 从同一文件夹加载程序集

c# - .Net app.config 文件在 c :\ProgramFiles\下被忽略

c# - 任务并行库 - LongRunning 任务与多个 Continuations

wcf - 如何为单个方案配置多个 WCF 绑定(bind)配置

c# - 如何在图像框上添加标记?

c# - 如何将 DataPager 与数据库分页一起使用

c# - 找不到方法 : 'System.Threading.Tasks.Task` 1<Microsoft. Rest.ServiceClientCredentials> Microsoft.Rest.Azure.Authentication.UserTokenProvider

.net - 对数组进行维数时,为每个元素分配了多少内存?

c# - LINQ 多重排序依据

c# - Dictionary<struct,int> 没有正确序列化