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 = ; //
public static CTEST ot = new CTEST();//
private float fx = ;
static private double dx = 100.03;//
private string s = "hello";
//public static readonly SINGLE_TON Instance = new SINGLE_TON();//加上这句就比较特殊了,这里虽有构造操作,但必须等到所有成员初始完成后才会进行
public static int x;//
public string str;
protected int y = ;
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 }

C#中成员初始化顺序的更多相关文章

  1. Java中的成员初始化顺序和内存分配过程

    Java中的成员初始化顺序和内存分配过程 原帖是这样描述的: http://java.dzone.com/articles/java-object-initialization?utm_source= ...

  2. Java中的初始化顺序(静态成员、静态初始化块,普通成员、普通初始化块、构造函数)

    本文链接    http://blog.csdn.net/xiaodongrush/article/details/29170099 參考文章     http://my.oschina.net/le ...

  3. C++成员初始化顺序

    #include <iostream> using namespace std; int seti() {cout << "seti" << e ...

  4. [java] java中的初始化顺序

    先看程序: package init_cls; class A{ {System.out.println("i am in the class A!");} static { Sy ...

  5. java类的成员初始化顺序和初始化块知识

    java类的成员初始化顺序和初始化块知识 转自:http://blog.csdn.net/lgfeng218/article/details/7606735 属性.方法.构造方法和自由块都是类中的成员 ...

  6. Java类继承关系中的初始化顺序

    Java类初始化的顺序经常让人犯迷糊,现在本文尝试着从JVM的角度,对Java非继承和继承关系中类的初始化顺序进行试验,尝试给出JVM角度的解释. 非继承关系中的初始化顺序 对于非继承关系,主类Ini ...

  7. Java类成员初始化顺序

    类中包含7中成员:1.静态变量 static2.final静态常量 final static3.静态代码块 static{}  //多个代码块顺序执行 4.普通变量5.普通代码块 {}  //多个代码 ...

  8. Java类的成员初始化顺序

    Java类的成员初始化顺序 2017-06-01 代码: public class InitializeSequence { public static void main(String[] args ...

  9. C++中类成员变量在初始化列表中的初始化顺序

    引子:我们知道,C++中类成员变量的初始化顺序与其在类中的声明顺序是有关的. 先看代码: class TestClass1 { public: TestClass1() { cout << ...

随机推荐

  1. iOS远程推送之友盟Push

    更新记录: 1.2015年10月23日上午10:10分更新,优化了该类,去除了不必要的方法. ----------------------------------------------------- ...

  2. Spring(三)Bean继续入门

    一.Aware相关接口 对于应用程序来说,应该尽量减少对Sping Api的耦合程度,然而有些时候为了运用Spring所提供的一些功能,有必要让Bean了解Spring容器对其进行管理的细节信息,如让 ...

  3. OC正则表达式的使用

    OC中一般正则表达式的使用方法为2步 1.创建一个正则表达式对象 2.利用正则表达式来测试对应的字符串 例如 NSString *checkString = @"a34sd231" ...

  4. Swift字符与字符串

    学习来自<极客学院:Swift中的字符串和集合> 工具:Xcode6.4 直接上基础的示例代码,多敲多体会就会有收获:百看不如一敲,一敲就会 import Foundation /**** ...

  5. Android 之 json数据的解析(jsonReader)

    json数据的解析相对而言,还是比较容易的,实现的代码也十分简单.这里用的是jsonReade方法来进行json数据解析. 1.在解析之前,大家需要知道什么是json数据. json数据存储的对象是无 ...

  6. android 之 adb 启动问题的一般解决办法

    有时,当我们打开eclipse准备运行Android项目时,虚拟机会启动不了,并且会出现下面的报错. [2015-10-07 16:47:46 - Game2048] ---------------- ...

  7. H5文件操作API

    引言 在之前我们操作本地文件都是使用flash.silverlight或者第三方的activeX插件等技术,由于使用了这些技术后就很难进行跨平台.或者跨浏览器.跨设备等情况下实现统一的表现,从另外一个 ...

  8. MongoDb的bin目录下文件mongod,mongo,mongostat命令的说明及使用

    MongoDB的下载地址:http://www.mongodb.org/downloads. 下载好直接解压安装包,即可使用. bin目录下的几个文件说明: mongo 客户端程序,连接MongoDB ...

  9. MySQL添加字段和删除字段

    MySQL添加字段应该如何实现呢?这是很多刚刚接触MySQL数据库的新人都提到过的问题,下面就为您介绍MySQL添加字段和删除字段的方法,希望对您能有所启迪. MySQL添加字段: alter tab ...

  10. 最完整PHP.INI中文版

    ;;;;;;;;;;;;;;;;;;; 关于php.ini ;;;;;;;;;;;;;;;;;;;; 这个文件必须命名为'php.ini'并放置在httpd.conf中PHPINIDir指令指定的目录 ...