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

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

  • 相关阅读:
    HDU1536_SNim_求sg值
    HDU1851_A Simple Game_求sg
    POJ1067_取石子游戏_威佐夫博弈
    HDU1848_Fibonacci again and again_经典的求sg
    POJ2425 && HDU1524_ A Chess Game_树形博弈
    .GB级数据库分区实现高性能
    数据库锁
    热烈庆祝“mysql 集群数据库架构成功”
    linux mysql注意事项
    SQL Server 数据库做读写分离
  • 原文地址:https://www.cnblogs.com/imap/p/2736279.html
Copyright © 2020-2023  润新知