zoukankan      html  css  js  c++  java
  • NET中对象的构建过程

         本节主要介绍一个对象构造的过程,看下面的代码:

    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);
            }
        }
    Main函数代码:
    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 废话:静态成员变量只会构造一次,静态构造函数只会执行一次。

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

  • 相关阅读:
    笛卡尔树学习笔记
    图论基础(自认为很全)
    我的博客在这里
    C++学习资料
    test
    个人介绍
    CF1153F Serval and Bonus Problem
    【ZJOI2020】抽卡
    【LOJ】小 Q 的序列
    我的个人博客:https://xyix.github.io
  • 原文地址:https://www.cnblogs.com/imap/p/2736279.html
Copyright © 2011-2022 走看看