zoukankan      html  css  js  c++  java
  • C#中成员初始化顺序

    http://blog.csdn.net/huangcailian/article/details/25958967

    一、成员初始化整体顺序

    1.成员赋值初始化先于构造函数;
    2.成员赋值初始先从子类再到基类;
    3.构造函数初始化先从基类再到子类;
    4.静态成员初始化优先于实例成员初始化;

    二、对类型静态成员构造的大致过程

    1.分配静态成员的内存空间,此时空间存储数据为0;
    2.执行类的静态成员的初始化语句;
    3.执行类的静态构造函数。

    三、对类型实例成员构造的大致过程

    1.分配实例成员的内存空间,此时空间存储数据为0;
    2.执行子类实例成员初始化语句;
    3.执行基类实例化成员初始化语句;
    4.执行基类构造函数;
    5.执行子类构造函数;

    四、同时有静态成员和实例成员的大致构造过程

    1.执行子类静态成员初始化语句;
    2.执行子类静态构造函数;
    3.执行子类实例成员初始化语句;
    4.执行基类静态成员初始化语句;
    5.执行基类静态构造函数;
    6.执行基类实例成员初始化语句;
    7.执行基类实例构造函数;
    8.执行子类实例构造函数。

    五、说明

    1.C#中静态构造函数都是私有的,不能为其添加访问修饰符;
    2.只有创建类的实例或调用任何静态成员时才能激发静态构造函数;
    3.调用一个未初始化类的静态成员时,他会先去初始化这个类的静态成员和静态构造函数。
     
    using System;
    using System.Diagnostics;
    using System.Text;
    
    class Test
    {
        class CTEST
        {
    
        }
        class SINGLE_TON
        {
            public static float sfx = 1; //1
            public static CTEST ot = new CTEST();//2
            private float fx = 13;
            static private double dx = 100.03;//3
            private string s = "hello";
            //public static readonly SINGLE_TON Instance = new SINGLE_TON();//加上这句就比较特殊了,这里虽有构造操作,但必须等到所有成员初始完成后才会进行
            public static int x;//22
            public string str;
            protected int y = 123;
            public SINGLE_TON()
            {
                Console.WriteLine("private single_ton");
            }
    
            //静态构造函数最会多只会被调用一次,在首次访问类的静态成员变量或生成类的实例时被调用。
            
            static SINGLE_TON()
            {
                Console.WriteLine("static single_ton");
            }
    
            public void dosth()
            {
                Console.WriteLine("do some thing");
            }
        }
        static void Main()
        {
            //首次访问类的静态变量,编译器首先会对所有有初始值的静态变量进行赋值操作,如1和2,3处。
            //然后调用静态构造函数。
            //不会对非静态变量进行赋值。不过它们都有默认值,数值类型为0,引用类型为null
            int x = SINGLE_TON.x;
            //        SINGLE_TON.Instance.dosth();
            //         SINGLE_TON.Instance.dosth();
            //         SINGLE_TON.Instance.dosth();
    
            //生成类实例时,编译器首先会对所有有初始值的静态变量进行赋值操作,如1和2,3处。
            //然后调用静态构造函数。
            //然后才对有初始值的非静态变量进行赋值。
            //然后调用普通构造函数。
            SINGLE_TON sg = new SINGLE_TON();
        }
    
    //输出结果:
    // private single_ton
    // static single_ton
    // do some thing
    // do some thing
    // do some thing
    
    }
  • 相关阅读:
    Yantai
    Star War
    douban's woshang
    cannot change font's type in coreldraw
    LuXun said
    WaiTan
    free ubuntu disk前天就收到了寄来的光盘
    Winter Swimming
    before buy laptop买本本前,先来看看
    ubuntu beginer
  • 原文地址:https://www.cnblogs.com/timeObjserver/p/6028308.html
Copyright © 2011-2022 走看看