C#的类成员初始化顺序

本文详细解析了C#中类成员的初始化顺序,并通过一个具体示例展示了静态成员、非静态成员及构造函数的调用时机。文章还介绍了如何通过实例化过程观察到成员变量的初始化流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)

那么该类将不会被实例化 

转载于:https://www.cnblogs.com/lydyy/p/5442915.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值