父子类,实例、静态成员变量,构造函数的执行顺序
原文: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子类构造函数
看来除了构造函数,子类全部比父类先执行,其顺序是静态先于实例,变量先于函数。然后子父类实例函数都是最后执行。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决