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();
    }
}

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

我对代码有两个疑问
  • 如何访问嵌套类中的外部类?我的意思是
    internal static readonly Singleton instance = new Singleton();
    

    有什么叫闭包?
  • 我无法理解这个评论
    // Explicit static constructor to tell C# compiler
    // not to mark type as beforefieldinit
    

    这个评论对我们有什么启示?
  • 最佳答案

  • 不,这与闭包无关。嵌套类可以访问其外部类的私有(private)成员,包括此处的私有(private)构造函数。
  • 阅读我的 article on beforefieldinit 。您可能需要也可能不需要 no-op 静态构造函数 - 这取决于您需要什么惰性保证。您应该知道 .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/

    10-14 11:03