c#构造初使化的顺序
这个很基础的知识,但我至今才意识到它。想想也很失败。
直接上代码:很简单
public class Base { int i=0; public Base() { System.Console.WriteLine("我是基类构造器"); } } class Program { static void Main(string[] args) { Base d = new Base(); } }
对于上面的代码。是先执行构造器,还是先初使化字段 i 变量呢?其实只要意识到这个问题,也就很容易试出来,它应当是先初使化字段 i 变量。
那么现在如果Base 派生出一个子类,那它的构造顺序又是怎么样的呢?
/// <summary> /// 基类 /// </summary> public class Base { public int baseint = 100; public Base() { System.Console.WriteLine("构造器:我是基类构造器"); } private class Inner { public Inner() { System.Console.WriteLine("字段:我是基类Inner"); } } /// <summary> /// 字段初使化 /// </summary> private Inner inner = new Inner(); } /// <summary> /// 子类 /// </summary> class Derived : Base { public Derived() { System.Console.WriteLine("构造器:我是子类构造器"); } private class Inner { public Inner() { System.Console.WriteLine("字段:我是子类Inner"); } } /// <summary> /// 字段初使化 /// </summary> private Inner inner = new Inner(); }
所以说它的执行顺序为:子类字段-父类字段-父类构造器-子类构造器
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· 分享4款.NET开源、免费、实用的商城系统
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 解决跨域问题的这6种方案,真香!
· 5. Nginx 负载均衡配置案例(附有详细截图说明++)
· Windows 提权-UAC 绕过