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 = " ...
随机推荐
- 导入外部jar包的方法
注:使用的编译平台为eclipse <算法>一书中需要引入外部jar包(algs4.jar),因此特地去学了下导入外部jar包的方法.步骤如下: 1.先将algs4.jar拷到j如下路径: ...
- MongoDB笔记(四)基本管理命令
MongoDB命令帮助系统 基本命令及实例 一基本命令 二基本DDL和DML 三启动与终止 四安全管理 五数据备份恢复与迁移管理 六远程连接管理 MongoDB是一个NoSQL数据库系统:一个数据 ...
- ubuntu intelliJ IDEA 12.1.4 安装
1 php插件 http://plugins.jetbrains.com/plugin/?id=6610 把插件下载到一个目录下,如果插件不兼容,多试几个版本! 2 打开ide, FILE -> ...
- jQuery siblings()用法与实例。
jQuery 的遍历方法siblings() $("给定元素").siblings(".selected") 其作用是筛选给定的同胞同类元素(不包括给定元素本身 ...
- Linq知识大全
select的源码public static IEnumerable<TResult> Select<TSource, TResult>(this IEnumerable< ...
- PHP-traits新特性详解
自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits. Traits 是一种为类似 PHP 的单继承语言而准备的代码复用机制.Trait 为了减少单继承语言的限制,使开发人 ...
- PHP PhantomJs中文文档(翻译)
介绍 PHP PhantomJS 是一个灵活的 PHP 库加载页面通过 PhantomJS 无头浏览器并将返回页面响应.这是方便于需要JavaScript的支持,同时还支持截屏测试网站.功能列表通过 ...
- 【转】【Top 100 Best Blogs for iOS Developers】
原文地址:http://www.softwarehow.com/best-blogs-for-ios-developers/ (by JP Zhang | Last updated: Apr 5, 2 ...
- jMeter之二
jMeter应用的最小子集有如下三个概念: 首先是线程组(Thread Group),线程组意味着定义一下多少个线程,多长时间建立起来(模拟增量按照一定频度上扬)以及循环多少次: 第二个是采样器(Sa ...
- 4070: [Apio2015]雅加达的摩天楼
Description 印尼首都雅加达市有 N 座摩天楼,它们排列成一条直线,我们从左到右依次将它们编号为 0 到 N−1.除了这 N 座摩天楼外,雅加达市没有其他摩天楼. 有 M 只叫做 “do ...