C军

不玩博客了!

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

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

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

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

posted on 2013-03-08 20:16  逆心  阅读(5158)  评论(1编辑  收藏  举报