public sealed class Singleton { public Singleton() { } public static Singleton Instance { get { return Nested.instance; } } class Nested { static Nested() { } internal static readonly Singleton instance = new Singleton(); } }
在内部定义了一个私有类型Nested,当第一次用到这个嵌套类型的时候,会调用静态构造函数创建Singleton的实例instance。类型Nested只在属性Singleton.Instance中被用到,由于其私有属性,其他人无法使用Nested。因此当我们第一次试图通过属性Singleton.Instance得到Singleton的实例时,会自动调用Nested的静态构造函数创建实例instance。如果我们不调用Singleton.Instance,那么就不会触发.NET运行时调用Nested,也不会创建实例,这样就做到了按需创建。
摘自《剑指offer》