C#的类成员初始化顺序
C#的类成员的定义和声明如下
using UnityEngine;
using System.Collections; public class TestController : ECController {
int a = b();
public static int test=10;
static int g = gg();
public static TestController Instance = new TestController(); static int gg()
{
Debug.Log("~~~~~~~gg~~~~");
return 99;
} static int d=100;
static int b()
{
Debug.Log("~~~~~~~b~~~~~~~");
test=test+2;
return test;
} int c=9;
private TestController()
{
ControllerManager.Instance.AddListener(this);
Debug.Log("~~~TestController~test~~~~~~~"+test+" "+c+" d "+d);
test=9;
}
static TestController()
{
Debug.Log("~~~TestController~test~~~~~~~"+test+" d "+d+" f "+f); }
static int f=100; static void main()
{ bool flag=false;
if(flag)//if(false)
{
}
Debug.Log("~~~main~~");
TestController t = TestController.Instance;
Debug.Log("~~~~~main~2~~"+TestController.f); } }
输出的结果:
~~~~~~~gg~~~~
~~~~~~~b~~~~~~~
~~~TestController~test~~~~~~~12 9 d 0
~~static~TestController~test~~~~~~~9 d 100 f 100
~~~main~~
~~~main~2~~100
说明总结:
当C#的类被确定可能会实例化时, 类的构造函数才被调用:
即C#会先预先运行一次,但不初始化非静态或常态变量,此时,如果该类可能被运行时,
该类就会被实例化,此时所有操作都是在main函数开始之前!
当该类实例化时 首先是
Instance之前的静态成员按照顺序依据赋值初始化
然后是所有的非静态成员初始化
最后是Instance之后的静态成员依据赋值初始化
最最后 开始运行,即执行main()
如果把main中的if(flag) 换为 if(false)
那么该类将不会被实例化
C#的类成员初始化顺序的更多相关文章
- C#类成员初始化顺序
这里直接给出C#类成员一般初始化顺序: 子类静态字段 子类静态构造 子类实例字段 父类静态字段 父类静态构造 父类实例字段 父类实例构造 子类实例构造 为什么说是"一般"初始化顺序 ...
- Java类成员初始化顺序
类中包含7中成员:1.静态变量 static2.final静态常量 final static3.静态代码块 static{} //多个代码块顺序执行 4.普通变量5.普通代码块 {} //多个代码 ...
- java小心机(5)| 浅谈类成员初始化顺序
类成员什么时候会被初始化呢?一般来说:"类的代码在初次使用时才被加载",加载过程包括了初始化. 比如说new A()调用构造函数时,类中全部成员都会被初始化. 但对于static域 ...
- C#类和类成员初始化顺序
1.不带静态成员的普通类,首先通过构造函数初始化. 2.带静态属性的类,无论是普通类还是静态类,都会先初始化静态字段,再执行构造函数. 3.类初始化时,不会执行类中方法,无论是否是静态.若想执行方法, ...
- Java类的成员初始化顺序
Java类的成员初始化顺序 2017-06-01 代码: public class InitializeSequence { public static void main(String[] args ...
- java类的成员初始化顺序和初始化块知识
java类的成员初始化顺序和初始化块知识 转自:http://blog.csdn.net/lgfeng218/article/details/7606735 属性.方法.构造方法和自由块都是类中的成员 ...
- java类的初始化顺序
在java中,当我们new一个对象时,对象中的成员,初始化块以及构造方法的加载是有一定的顺序的,看下面一副图: 一.单类(无基类)下的初始化顺序: public class Parent { stat ...
- C++成员初始化顺序
#include <iostream> using namespace std; int seti() {cout << "seti" << e ...
- C#多态;父类引用指向子类对象;new和override的区别;new、abstract、virtual、override,sealed关键字区别和使用代码示例;c#类的初始化顺序
关于父类引用指向子类对象 例如: 有以下2个类 public class Father { public int age = 70; public static string name = " ...
随机推荐
- PAT_1046 划拳
啦啦啦.今天晚上火车回学校了.= =还是挺舍不得家里的. 题目描述: 划拳是古老中国酒文化的一个有趣的组成部分.酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字.如果谁比划出的数字 ...
- itoa 和_itoa_s
1> itoa, 将整数转换为字符串. char * itoa ( int value, char * buffer, int radix ); 它包含三个参数: value, 是要转换的数字 ...
- (转)linux多线程,线程的分离与结合
转自:http://www.cnblogs.com/mydomain/archive/2011/08/14/2138454.htm 线程的分离与结合 在任何一个时间点上,线程是可结合的(joi ...
- Spark-Cassandra-Connector 插入数据函数saveToCassandra
在spark-shell中将数据保存到cassandra: var data = normalfill.map(line => line.split("\u0005")) d ...
- 今天收到报警邮件,提示网站502 bad gateway,
今天收到报警邮件,提示网站502 bad gateway, 输入网站url后果然无法打开: 登录服务器查看nginx进程正常: 查看fastcGI进程已经停止运行了: 问题找到后就该查找是什么原因产生 ...
- centos 不支持mysql
感觉是php-odbc必须装 yum -y install php php-fpm yum –y install php-mysql php-common php-mbstring php-gd ph ...
- get值乱码(gbk编码浏览器造成)
$condition = urldecode($condition); 即可
- (转载)Delphi StringGrid常用属性和常用操作
Delphi StringGrid常用属性和常用操作 StringGrid组件用于建立显示字符串的网格,与电子表格相似.它可使表格中的字符串和相关对象操作简单化.StringGrid组件提供了许多可控 ...
- [简历] JAVA 软件工程师
首先,一份好的简历不光说明事实,更通过FAB模式来增强其说服力. Feature:是什么 Advantage:比别人好在哪些地方 Benefit:如果雇佣你,招聘方会得到什么好处 其次,写简历和写议论 ...
- STM32之外部中断控制
一.STM32外部中断 1.STM32外部中断结构图 如上图所示:主要包括四个环节,GPIO.AFIO.EXTI.NVIC.以STM32F103VE(100脚)为例说明硬件模块的数量: GPIO: ...