相关疑难解决方法(0)

beforefieldinit旗帜做什么?

beforefieldinit旗帜做什么?当我查看我班级的IL时,我看到了这个标志,但我不知道这个标志实际上在做什么?

.net cil

77
推荐指数
2
解决办法
2万
查看次数

为什么C#6.0中的单例实现不需要beforefieldinit标志?

我试图理解为什么这是Singleton模式的正确实现:

public sealed class Singleton : ISingleton
{
    public static Singleton Instance { get; } = new Singleton();

    private Singleton() { }

    // methods
}
Run Code Online (Sandbox Code Playgroud)

怎么样的beforefieldinit标志?根据Jon Skeet的文章:

类型初始值设定项的懒惰只有在未使用名为beforefieldinit的特殊标志标记类型时才由.NET保证.不幸的是,C#编译器(至少在.NET 1.1运行时中提供)标记所有没有静态构造函数的类型(即看起来像构造函数但被标记为静态的块)作为beforefieldinit.

最新版本的C#中不需要静态构造函数吗?

上面的代码是SystemClockJon Skeet在NodaTime项目中的实现.

编辑 Jon Skeet代码供参考(为什么我提到这个beforefieldinit标志):

public sealed class Singleton
{
    private static readonly Singleton instance = new Singleton();

    // Explicit static constructor to tell C# compiler
    // not to mark type as beforefieldinit
    static Singleton()
    {
    }

    private Singleton()
    {
    }

    public static Singleton …
Run Code Online (Sandbox Code Playgroud)

c# singleton

11
推荐指数
1
解决办法
2866
查看次数

标签 统计

.net ×1

c# ×1

cil ×1

singleton ×1