beforefieldinit 标志有什么作用?
当我查看班级的 IL 时,我看到这个标志,但我不知道这个标志实际上在做什么?
See 我的文章在这个问题上。
基本上,beforefieldinit
意味着“可以在引用任何静态字段之前的任何时候初始化该类型。”理论上这意味着它可以是非常懒惰初始化 - 如果调用不触及任何字段的静态方法,JIT 不需要初始化类型。
在实践中这意味着该类已初始化earlier比其他情况要好 - 可以在第一个方法开始时对其进行初始化might用它。将此与类型进行比较don't have beforefieldinit
应用于它们,其中类型初始化必须紧接在第一个之前发生actual use.
所以,假设我们有:
public static void DoSomething(bool which)
{
if (which)
{
FirstType.Foo();
}
else
{
SecondType.Bar();
}
}
如果两种类型都有beforefieldinit
应用于它们(在 C# 中,它们默认这样做,除非该类型具有静态构造函数),然后它们将both在开始时被初始化DoSomething
方法(通常 - 不能保证)。如果他们没有beforefieldinit
那么只有one其中将根据标志进行初始化。
这就是为什么在以下情况下通常使用静态构造函数(甚至是空的构造函数!)实现单例模式.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)