C# 静态构造函数,静态变量执行顺序(升华版)

上篇 是基本语法基础下的执行顺序,包括继承这个维度下的执行顺序,我们可以依照的规律顺下来,下面我们看下一些摸不到头脑的情况

我们实验 一个 类中的方法 去调用另一个非继承类的情况,  先看有 静态构造函数 和没有静态构造函数执行的差别


 class Program
    {
        static void Main(string[] args)
        {                                           //执行顺序5         
            var de = new People("2");               //执行顺序6     
            People.Instance.OutDemo();              //执行顺序8


            Console.ReadKey();                     //执行顺序10
        }

    }

    public class People
    {
        public void OutDemo()                       
        {                                       //执行顺序9
            Console.WriteLine($"HaHa");
        }

        public static readonly People Instance = new People();        //执行顺序1


        public static Action Inssstance = () => { Console.WriteLine("11"); };      //执行顺序4

        private People()                       
        {                                      //执行顺序2
            Console.WriteLine(3);               //执行顺序3
        }

        public People(string ss)                  
        {                                     //执行顺序7
          
        }
    }



执行顺序 大致是上面十个步骤, 是不是感觉有点蒙蔽了,首先刚开始就没进Main函数,跳到 People下面了,好吧,我们暂且给自己一个说服自己的理由,如果方法中有直接调另一个类的静态成员的,先去走到另一个类中去初始化去.
ok, 接下来 执行顺序1 中赋值的时候 调的 new People(),然后到 执行顺序2 里面, 而另一个静态的 执行顺序4 在执行顺序3走完 随后 ,这个也可以理解,谁让执行顺序2 人家 赋值的时候 调的构造函数呢,然后执行顺序4走完 ok,没有静态的了,调回到原 Program里的main方法了,这个和上篇讲的静态走完再走非静态的不一样,这个也可以理解,谁让两个类不是继承的呢,到Program的Main后 继续 5 、6、7、 8、9、10,这个顺序没有异议。
ok,我们似乎给了自己一个完美的解释。先别高兴的太早,接下来,我们再做一件事情:
我们给program定义一个静态构造函数。然后再看下顺序会是什么样的:


猜你喜欢

转载自www.cnblogs.com/wwkk/p/10317476.html