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#的类成员初始化顺序的更多相关文章

  1. C#类成员初始化顺序

    这里直接给出C#类成员一般初始化顺序: 子类静态字段 子类静态构造 子类实例字段 父类静态字段 父类静态构造 父类实例字段 父类实例构造 子类实例构造 为什么说是"一般"初始化顺序 ...

  2. Java类成员初始化顺序

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

  3. java小心机(5)| 浅谈类成员初始化顺序

    类成员什么时候会被初始化呢?一般来说:"类的代码在初次使用时才被加载",加载过程包括了初始化. 比如说new A()调用构造函数时,类中全部成员都会被初始化. 但对于static域 ...

  4. C#类和类成员初始化顺序

    1.不带静态成员的普通类,首先通过构造函数初始化. 2.带静态属性的类,无论是普通类还是静态类,都会先初始化静态字段,再执行构造函数. 3.类初始化时,不会执行类中方法,无论是否是静态.若想执行方法, ...

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

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

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

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

  7. java类的初始化顺序

    在java中,当我们new一个对象时,对象中的成员,初始化块以及构造方法的加载是有一定的顺序的,看下面一副图: 一.单类(无基类)下的初始化顺序: public class Parent { stat ...

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

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

  9. C#多态;父类引用指向子类对象;new和override的区别;new、abstract、virtual、override,sealed关键字区别和使用代码示例;c#类的初始化顺序

    关于父类引用指向子类对象 例如: 有以下2个类 public class Father { public int age = 70; public static string name = " ...

随机推荐

  1. SGU 281.Championship

    题意: 有n(n≤50000)支队伍参加了两场比赛,分别有两个排名.现在要求输出总排名,如果对任意m,在两个排名的前m个队伍都相同,那么在总排名前m个队伍就是这些队伍.其它情况按字典序排. Solut ...

  2. java特殊运算符(转)

    原码:符号位用0表示正号,用1表示负号,数值一般用二进制形式表示 反码:机器数的反码可由原码得到.如果机器数是正数,则该机器数的反码与原码一样:如果机器数是负数,则该机器数的反码是对它的原码(符号位除 ...

  3. URL重写 UrlRewrite

    为什么要URL重写? 1.有利于SEO,带参数的URL权重较低: 2.地址看起来更正规,推广uid 伪静态:看起来像普通页面,而非动态生成的页面. 原理:在Global.asax的Applicatio ...

  4. Sql server 浅谈用户定义表类型

    1.1 简介 SQL Server 中,用户定义表类型是指用户所定义的表示表结构定义的类型.您可以使用用户定义表类型为存储过程或函数声明表值参数,或者声明您要在批处理中或在存储过程或函数的主体中使用的 ...

  5. 自己动手丰衣足食,h5手机端jquery弹窗插件(事件冒泡、单例模式、遮盖部分禁止默认滚动)

    感谢浏览,欢迎交流=.= 公司开发微信网页多处需要使用弹窗,使用jquery-ui的定制化下载仍需要150多kb,想来有些奢侈(最终下来只有11kb,压缩后2kb,啊,我的神), 手机端弹窗方式与pc ...

  6. Jquery环境搭建前言

  7. css的box-sizing:border-box有什么用

    css的box-sizing:border-box有什么用:视频说是多了的尺寸去掉了,适配box宽高

  8. CentOS系统安全配置

    http://down.51cto.com/data/318797 http://www.centos.bz/2011/07/centos-system-security-configure/ htt ...

  9. atexit()函数

    atexit()函数  头文件:#include<stdlib.h> 功 能: 注册终止函数(即main执行结束后调用的函数) 用 法: int atexit(void (*func)(v ...

  10. .NET笔试题(关于迭代的:遍历XML中的FileName)

    一.使用迭代算法,遍历XML文件中所有的文件名 写一个函数返回文件名集合 在主函数中调用该方法: 以后有关迭代的都写到这儿