NET中对象的构建过程
本节主要介绍一个对象构造的过程,看下面的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | public abstract class A { private static int s = 10; //1.5 private int m = 5; //1.7 static A() //1.6 { Console.WriteLine( "A" ); } public A() //1.8 { Say(); } public abstract void Say(); } public class B : A { private static int mCount = 0; //1.1 private int x = 1; //1.3 private int y = 2; //1.4 static B() //1.2 { Console.WriteLine( "B" ); } public B() //1.9 { x = 1; y = 1; mCount++; } public override void Say() { Console.WriteLine( "x={0},y={1},count={2}" ,x,y,mCount); } } |
1 | Main函数代码: |
1 2 3 4 5 6 7 8 | static void Main( string [] args) { B b1 = new B(); //我在上面的代码中用1.*标出了该语句的构造顺序 B b2 = new B(); Console.Read(); } |
运行结果如下:
总结:
1,对象构造的顺序遵循如下原则:
1.1 先从要new 的类的静态成员开始构造,静态成员中,先构造静态成员变量,再执行静态构造函数。
1.2 接着构造要new的类的实例成员变量。
1.3 接着调用要new的类的实例构造函数,注意:在执行该实例构造函数前,会先激发基类的构造过程,基类的构造过程又会从1.1开始。
基类构造完毕后才会执行该实例构造函数。
可以这样理解:执行实例构造函数时意味着要真正创建类的实例了,但是这时父类还没有构造了,焉能先构造子类?
所以就要暂停执行子类的实例构造函数,转而启动父类的构造过程。
1.4 废话:静态成员变量只会构造一次,静态构造函数只会执行一次。
总结成一句话就是:先静态,后实例,先成员变量,后构造函数,实例构造函数激发类的递归构造。
作者:imap
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
【推荐】国内首个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应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架