zoukankan      html  css  js  c++  java
  • 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子类构造函数  

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

  • 相关阅读:
    ubuntu16.04左边栏图标效果设置
    VMware虚拟机 Ubuntu 16.04 安装 VMware Tools
    微信换取openid的值
    thinkphp关于T方法
    Think关于循环的事
    base64格式转换为图片
    Think视图模型格式
    thinkphp里多表事务
    ThinkPHP数据库驱动之mysql事物回滚
    webhook是啥?
  • 原文地址:https://www.cnblogs.com/mingxuantongxue/p/3804392.html
Copyright © 2011-2022 走看看