今天去面试的时候被一道题问得一点脾气都没有,今天特地来研究下。

  子类成员变量,子类静态成员变量,子类构造函数,父类成员变量,父类静态成员变量,父类构造函数的执行顺序。

  现在贴上从另外一个.net程序员写的实例,稍微改下。

    public class ShowInfo
    {
        public ShowInfo(string info)
        {
            Console.WriteLine(info);
        }
    }

    class father
    {
        public static ShowInfo StaticFatherMember = new ShowInfo("父类静态成员变量执行"); //父类静态成员变量
        public ShowInfo InstanceFatherMember = new ShowInfo("父类实例成员变量执行");     //父类实例成员变量
        static father()         //父类构造函数  
        {
            ShowInfo StaticFatherMethod = new ShowInfo("父类静态构造函数执行");     //父类静态构造函数
        }
        public father()
        {
            ShowInfo bcsI = new ShowInfo("父类实例构造函数执行");
        }
    }
    class son : father
    {
        public static ShowInfo StaticSonMember = new ShowInfo("子类静态成员变量执行");
        public ShowInfo InstanceStaticSonMember = new ShowInfo("子类实例成员变量执行");

        static son()
        {
            ShowInfo StaticSonMethod = new ShowInfo("子类静态构造函数执行");
        }
        public son()
        {
            ShowInfo InstanceSonMethod = new ShowInfo("子类实例构造函数执行");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            //各个对象的初始化顺序如下:  
            //①子类静态成员变量  
            //②子类静态构造函数  
            //③子类实例成员变量  
            //④父类静态成员变量  
            //⑤父类静态构造函数  
            //⑥父类实例成员变量  
            //⑦父类构造函数  
            //⑧子类构造函数  
            son s = new son();
            Console.ReadKey();
        }
    }  

来看看最后的输出结果:

父子类,实例、静态成员变量,构造函数的执行顺序

       1子类静态成员变量  
            2子类静态构造函数  
            3子类实例成员变量  
            4父类静态成员变量  
            5父类静态构造函数  
            6父类实例成员变量  
            7父类构造函数  
            8子类构造函数  

看来除了构造函数,子类全部比父类先执行,其顺序是静态先于实例,变量先于函数。然后子父类实例函数都是最后执行。

相关文章:

  • 2021-07-17
  • 2021-04-12
  • 2021-08-08
  • 2021-06-15
  • 2021-12-18
  • 2021-10-26
  • 2021-10-01
  • 2021-06-27
猜你喜欢
  • 2021-10-15
  • 2021-12-05
  • 2022-12-23
  • 2022-01-29
  • 2021-09-08
  • 2022-12-23
  • 2022-01-21
相关资源
相似解决方案