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 = " ...
随机推荐
- Eclipse 和 Intellij idea 快捷键的区别
描述 Eclipse IntelliJ 代码补全 Ctrl+space ctrl+space 打开类或者接口 (两个IDE都支持使用“驼峰字符”前缀的方式来过滤查找列表,进而轻松完成搜索:比如:可以使 ...
- weblogic 12c 配置jvm的内存大小
每个weblogic server 都是运行在一个java虚拟机上 ,对weblogic的内存设置也就是对java虚拟机的内存设置. MEM_ARGS=-Xms512m -Xmx1024m -XX:M ...
- Linux消息队列
#include <stdio.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/ms ...
- java.util.Map源码分析
/** * An object that maps keys to values. A map cannot contain duplicate keys; * each key can map to ...
- 桥接模式(Bridge Pattern)
桥接模式,用于将抽象化与实现化解偶,使得二者可以独立变化. 举一个数据库JDBC的例子: 定义一个Driver接口,不同的数据库实现的接口,如MySQL,SQLServer public interf ...
- ubuntu zendDebugger.so 加载不上的问题
参考文章 http://blog.sina.com.cn/s/blog_6612d5810101dapf.html 装zenDdebugger是为了在eclipse中调试用!!!!!!!结果搞了半 ...
- sort对象数组排序
function objectSort(property, desc) { //降序排列 if (desc) { return function (a, b) { return (a[property ...
- Spring Cloud Eureka Server例子程序
Spring-Cloud-Eureka-Server 及Client 例子程序 参考源代码:https://github.com/spring-cloud-samples/eureka 可以启动成功, ...
- HTML5 改良的 input 元素的种类
html5中增加改良的input 元素 . 在过去我们制作网页输入框,会用到不少JS验证,如今有了HTML5写这种效果已经没有那么麻烦了,下面我来给大家介绍两种HTML5的input的新增加的类型应用 ...
- 【javascript 引用类型(一)】
javascript 的引用类型大致分为:Object 类型.Array 类型.Date 类型.RegExp 类型.Function 类型.基本包装类型和单体内置对象.这里我们着重介绍 Object ...