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

原文:http://www.cnblogs.com/kissdodog/archive/2013/03/08/2950682.html

 

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

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

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

  现在贴上从另外一个.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 @   阿玛  阅读(232)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示