为什么实例构造函数首先运行?

时间:2018-04-28 18:51:51

标签: c# .net

我想遇到一个我想了解的C#行为。

为什么在两种情况下实例构造函数都先运行?

    class Program
    {
        public static void Main()
        {
            //Singleton s = new Singleton(); case 1
            var test = Singleton.Instance; // case 2
        }
    }
    class Singleton
    {
        static readonly Singleton _instance = new Singleton();

        public static Singleton Instance { get { return _instance; } }

        private Singleton()
        {
            Console.WriteLine("Instance Constructor");
        }

        static Singleton()
        {
            Console.WriteLine("Static Constructor");
        }
    }

输出:

  

实例构造函数

     

静态构造函数

2 个答案:

答案 0 :(得分:7)

它不会先运行,它看起来就好像它一样。你写的是(大致)等同于

class Singleton
{
    static readonly Singleton _instance;

    public static Singleton Instance { get { return _instance; } }

    private Singleton()
    {
        Console.WriteLine("Instance Constructor");
    }

    static Singleton()
    {
        _instance = new Singleton();
        Console.WriteLine("Static Constructor");
    }
}

也就是说,实例构造函数在静态构造函数执行时被称为

在静态构造函数中首先发生字段初始化(在Console.WriteLine调用之前)的原因很简单:静态构造函数的其余部分可能依赖于那些已经初始化的字段。

答案 1 :(得分:0)

构造函数创建对象。此操作打印第一行单词。

private Singleton()
        {
            Console.WriteLine("Instance Constructor");
        }

然后调用单例类的静态实例,打印第二行代码。