[C#编程指南] 静态构造函数:执行顺序

构造函数分类回顾

  根据前面对构造函数基本概念的介绍,构造函数可以相应的分为:①实例级别的构造函数 ②类级别的构造函数实例级别的构造函数会在每次创建对象实例的时候都会被调用到,类级别的构造函数仅仅会在首次创建该类的实例或者引用该类的静态成员时被调用到根据构造函数(实例级别的构造函数)和静态构造函数(类级别的构造函数)的相关概念,当一个类同时包含有构造函数和静态构造函数时,可以推测在创建该类的对象实例的时候,其静态构造函数先于其构造函数执行,当一个父类和其子类同时包含有它们各自的构造函数和静态构造函数时,情况就比较复杂,没法直接从相关概念中推测父类和其子类构造函数和静态构造函数的执行顺序,这里通过简单的代码简单分析这种情况下,父类和其子类构造函数和静态构造函数的执行顺序。

构造函数执行顺序

⭐ 首先,声明父类Father和其子类Son,它们都同时包含有它们各自的构造函数和静态构造函数:

public class Father
{
    static Father()
    {
        Console.WriteLine("父类静态构造函数被调用!");
    }

    public Father()
    {
        Console.WriteLine("父类构造函数被调用!");
    }
}

public class Son : Father
{
    static Son()
    {
        Console.WriteLine("子类静态构造函数被调用!");
    }

    public Son()
    {
        Console.WriteLine("子类构造函数被调用!");
    }
}

⭐ 其次,创建2个Son的对象实例:

class Program
{
    static void Main(string[] args)
    {
        Son son1 = new Son();
        Son son2 = new Son();
        Console.ReadKey();
    }
}

⭐ 最后,编译运行看控制台输出结果:

  根据控制台的输出结果,可以得出结论:当一个父类和其子类同时包含有它们各自的构造函数和静态构造函数,子类创建实例时,如果这是首次创建该类的实例,则子类和父类的静态构造函数先被调用:首先子类的静态构造函数被调用,接着父类的静态构造函数被调用(如果不是首次创建该类的实例,则子类和父类的静态构造函数都不会被调用),而后子类和父类的构造函数后被调用:首先父类的构造函数被调用,接着子类的构造函数被调用。

  总结:⭐ 静态构造函数先于构造函数执行

     ⭐ 静态构造函数执行顺序:子类静态构造函数被调用 -> 父类静态构造函数被调用

     ⭐ 构造函数执行顺序:父类构造函数被调用 -> 子类构造函数被调用

posted @ 2021-07-01 16:43  煤球瓜  阅读(330)  评论(0)    收藏  举报