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();
        }

运行结果如下:

Q1XO_NSMUX1MZKZKFP8A0M3

 

总结:

1,对象构造的顺序遵循如下原则:

1.1 先从要new 的类的静态成员开始构造,静态成员中,先构造静态成员变量,再执行静态构造函数。

1.2 接着构造要new的类的实例成员变量。

1.3 接着调用要new的类的实例构造函数,注意:在执行该实例构造函数前,会先激发基类的构造过程,基类的构造过程又会从1.1开始。

基类构造完毕后才会执行该实例构造函数。

可以这样理解:执行实例构造函数时意味着要真正创建类的实例了,但是这时父类还没有构造了,焉能先构造子类?

所以就要暂停执行子类的实例构造函数,转而启动父类的构造过程。

1.4 废话:静态成员变量只会构造一次,静态构造函数只会执行一次。

总结成一句话就是:先静态,后实例,先成员变量,后构造函数,实例构造函数激发类的递归构造。

posted @   imap  阅读(173)  评论(0编辑  收藏  举报
编辑推荐:
· 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 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示