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

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

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

  现在贴上从另外一个.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子类构造函数  

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

你可能感兴趣的:(构造函数)