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. 在Mac上配置Android adb命令

    一 adb定义: adb(android debug bridge)是android系统中的一种命令行工具,通过它可以和android设备或模拟器通信. 二 在Mac上的配置过程 启动终端 进入当前用 ...

  2. Swift开发第一篇——异常处理及断言

    本篇分两部分: 1.错误和异常处理 2.Swift 中的断言 1.错误和异常处理 在 OC 开发中,我们通常会将 error 置为 nil NSError *error; BOOL success = ...

  3. ASP出500错误怎么办(理论上并不止500错误,其他错误可以同样可以获得更多信息以帮助解决问题)

    造成500错误常见原因有:ASP语法出错.ACCESS数据库连接语句出错.文件引用与包含路径出错.使用了服务器不支持的组件如FSO等. 为了定位500错误的具体原因,可以这样做: 让IE显示详细的出错 ...

  4. Mysql中的函数

    什么是函数 mysql中的函数与存储过程类似,都是一组SQL集: 与存储过程的区别 函数可以return值,存储过程不能直接return,但是有输出参数可以输出多个返回值: 函数可以嵌入到sql语句中 ...

  5. 方程ax2+bx+c=0;一元二次方程。求根

    <body>方程ax2+bx+c=0;一元二次方程.求根请输入a:<input type="number" id="a"/><br ...

  6. 窗体DataGridView控件中按回车键时,单元格向下移动,如何能改成向右移动

    方法一:protected override void OnKeyUp(System.Windows.Forms.KeyEventArgs e) { base.OnKeyUp(e); if (e.Ke ...

  7. 一个关于group by和having子句的小例子

    表结构: 要求: 查询有多个员工的工资不低于2000的部门编号(就是说如果一个部门的员工大于2000的人数有两个或两个以上就查询出来) sql语句: select [DEPARTMENT_ID],co ...

  8. 一个完整的WSDL文档及各标签详解

    <?xml version="1.0" encoding="UTF8" ?> <wsdl:definitions targetNamespac ...

  9. strcat()函数常见问题

    strcat(char *_Destination,const char *_Source)函数的功能是将后一个字符串粘贴到前一个字符串的末尾 原型 char *strcat(char *_Desti ...

  10. js 操作select和option

    js 操作select和option 1.动态创建select function createSelect(){ var mySelect = document.createElement_x(&qu ...