Singleton singleton = Singleton.instance;此时会输出ctor。

解决方案 »

  1.   

    可以肯定的是静态成员一定是在实例成员以前进行初始化.你声明了静态的instance,但是该类并没有被使用。该类没有被调用,也就不会执行任何一次实例化。所以,静态成员也就没有机会初始化。
      

  2.   


    也就是说,不会像C程序那样,全局变量会在main函数之前就初始化。而是,类内部的函数或者static变量,没有对类的调用,也不会去初始化static变量。我发现如果有了一个static函数的调用,那么类的static变量就会被初始化了:    public class Singleton
        {
            public Singleton() { Console.WriteLine("ctor\n"); }
            private static readonly Singleton instance = new Singleton();
            public static void func(){ Console.WriteLine("func\n");}
        }
        class Program
        {
            static void Main(string[] args)
            {
                Singleton.func();
            }
        }程序输出ctor然后是func
    多谢。