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

}

posted on 2016-11-03 21:34 时空观察者9号 阅读(...) 评论(...) 编辑 收藏

C#中成员初始化顺序相关推荐

  1. c++构造函数以及类中变量初始化顺序

    c++构造函数以及类中变量初始化顺序 Submitted by ant on Fri, 03/29/2013 - 20:05 构造函数 c++ 的类提供了一种抽象机制,使用起来要比 c 方便很多.为了 ...

  2. java类成员初始化_简单了解Java类成员初始化顺序

    这篇文章主要介绍了简单了解Java类成员初始化顺序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 类中包含7中成员: 1.静态变量 static 2 ...

  3. lt;转载自刘佳ID:freedom0203和waretgt; C++中成员初始化列表的使用

    刘佳: C++在类的构造函数中,可以两种方式初始化成员数据(data member). 1,在构造函数的实现中,初始类的成员数据.诸如: class point { private:  int x,y ...

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

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

  5. 【转载】c#类的成员初始化顺序

    作者:彭白洋 创建于:2009-01-15 出处:http://www.cnblogs.com/siceblue/archive/2009/01/15/1376430.html  收录于:2013-0 ...

  6. java成员初始化顺序_Java成员初始化顺序

    1. 初始化顺序 在类的内部,变量定义的先后顺序决定了初始化的顺序.即使变量散布于方法定义之间,他们仍会在任何方法(包括构造器)被调用之前初始化. 2. 静态成员初始化顺序 1⃣️初始化类的静态成员或 ...

  7. Java类的各种成员初始化顺序

    初始化规则 1.父类[静态成员]和[静态代码块],按在代码中出现的顺序依次执行. 2.子类[静态成员]和[静态代码块],按在代码中出现的顺序依次执行. 3.父类的[普通成员变量被普通成员方法赋值]和[ ...

  8. 【c++】构造函数初始化列表中成员初始化的次序性

    上代码 #include <iostream> using namespace std;class A {public:A(int v): j(v + 2), i(j) {}void pr ...

  9. Java类中的初始化顺序

    根据<Thinking in Java>相关章节及自己的理解举例来说明类初始化顺序. public class InitialOrder {private static String st ...

最新文章

  1. SIPp工具Linux下安装
  2. Effective Java实作toString() - 就是爱Java
  3. (转)正则表达式语法备忘录
  4. leetcode算法题--Flatten Nested List Iterator
  5. 双圆环环布带系法图解_【图】板鞋系鞋带 板鞋鞋带的系法有几种
  6. UITT-欧盟MiFID II新监管法规实践先行者
  7. python strip()方法 去除字符串头尾指定字符 默认为空格、换行符、制表符、回车符
  8. Netty实例:实现简单的通讯功能
  9. 学院菌喊你来领取年终学习奖状啦~~!!!
  10. 前端学习(3273):js中this的使用二
  11. 基于prometheus + grafana + mysql + Telegram 监控告警
  12. Java面试之Synchronized无法禁止指令重排却能保证有序性
  13. Office 2016 到底有没有更新?
  14. (转)增强学习(二)----- 马尔可夫决策过程MDP
  15. 向linux内核提交了第一个patch,在3.8中发布,庆祝一下!
  16. 软件工程之软件维护与再工程
  17. 计算机模拟仿真技术的功能,浅谈虚拟仿真技术
  18. Android通过百度api地址经纬度获取文字位置信息
  19. 非洲做项目的务实与务虚
  20. c# rar解压大小_C#解压、压缩RAR文件

热门文章

  1. 笔记-高项案例题-2019年上-人力资源管理
  2. CentOS7中Docker的安装与配置
  3. 程序员开发利器:源代码管理的十条建议
  4. 在Flutter中解析复杂的JSON(一篇顶十篇)
  5. python asyncio_Python 的异步 IO:Asyncio 简介
  6. C语言放大字符怎么编程,c语言中怎么将个别字体放大,如9,将其放大,怎么编程呢?...
  7. seata 如何开启tcc事物_如何能在实战中完成分布式事务?知道这些点很重要
  8. 他们为什么融资上市?因为用好了……
  9. Centos7 下部署PPTP
  10. 生产环境子域降级记录