上篇 是基本语法基础下的执行顺序,包括继承这个维度下的执行顺序,我们可以依照的规律顺下来,下面我们看下一些摸不到头脑的情况
我们实验 一个 类中的方法 去调用另一个非继承类的情况, 先看有 静态构造函数 和没有静态构造函数执行的差别
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定义一个静态构造函数。然后再看下顺序会是什么样的: