gpt4 book ai didi

c# - Jon Skeet 的 Singleton 说明

转载 作者:IT王子 更新时间:2023-10-29 03:29:28 25 4
gpt4 key购买 nike

public sealed class Singleton
{
Singleton() {}

public static Singleton Instance
{
get
{
return Nested.instance;
}
}

class Nested
{
// Explicit static constructor to tell C# compiler
// not to mark type as beforefieldinit
static Nested() {}
internal static readonly Singleton instance = new Singleton();
}
}

我希望实现Jon Skeet's Singleton pattern在我当前的 C# 应用程序中。

我对代码有两个疑惑

  1. 如何访问嵌套类中的外部类?我是说

    internal static readonly Singleton instance = new Singleton();

    有什么东西叫闭包吗?

  2. 我无法理解这条评论

    // Explicit static constructor to tell C# compiler
    // not to mark type as beforefieldinit

    这条评论对我们有何启示?

最佳答案

  1. 不,这与闭包无关。嵌套类可以访问其外部类的私有(private)成员,包括此处的私有(private)构造函数。

  2. 阅读我的 article on beforefieldinit .您可能想要也可能不想要无操作静态构造函数——这取决于您需要什么惰性保证。您应该知道 .NET 4 changes the actual type initialization semantics somewhat (仍在规范范围内,但比以前更懒)。

真的需要这个模式吗?你确定你不能逃脱吗:

public sealed class Singleton
{
private static readonly Singleton instance = new Singleton();
public static Singleton Instance { get { return instance; } }

static Singleton() {}
private Singleton() {}
}

关于c# - Jon Skeet 的 Singleton 说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2550925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com