C# 之静态构造器与静态字段初始化器
public class Test
{
/// <summary>
/// 静态字段初始化器会在调用静态构造器前运行。
/// 如果类型没有静态构造器,字段会在类型被使用前或运行时中更早的时间进行初始化.
/// 静态字段初始化器按照字段声明的先后顺序运行。
/// </summary>
public static int X = Y;//静态字段初始化器
public static int Y = 3;//静态字段初始化器
public static int Z = 6;//静态字段初始化器
public static int ZX = Z;//静态字段初始化器
/// <summary>
/// 静态构造器,一个类型只能定义一个静态构造器,名称必须和类名相同,且没有参数。
/// 运行时将在类型使用之前调用静态构造器,以下两种行为可以触发静态构造器执行:
/// ·实例化类型
/// ·访问类型的静态成员
/// </summary>
static Test()
{
Console.WriteLine("Test Type Initialized");
}
public Test()
{
Console.WriteLine("This is Initalize function");
}
}
class ProgramA
{
static void Main()
{
Test t = new Test();
Console.WriteLine("X is "+Test.X);
Console.ReadLine();
}
}
OUTPUT:
Test Type Initialized
This is Initalize function
X is 0
输出结果正证实了:静态构造器只会执行一次。
class ProgramA
{
static void Main()
{
Console.WriteLine("Z is " + Test.Z);
Console.WriteLine("ZX is "+Test.ZX);
Console.ReadLine();
}
}
output:
Test Type Initialized
Z is 6
ZX is 6
输出结果正证实了:静态字段初始化器是按照顺序进行的。
class Foo
{
/// <summary>
/// 静态字段初始化器按照声明顺序运行
/// </summary>
public static Foo Instance = new Foo();
public static int X = 3;
Foo()
{
Console.WriteLine(X);
}
}
class ProgramA
{
static void Main()
{
//静态字段初始化器在类型使用前就运行,所以首先是运行Instance,
//而Instance正好调用了实例构造函数,而实例构造函数打印X,而此时,
//X还没有赋值,所以打印出0,而后,才初始化X为3,再在Main()函数中打印出X,即3
Console.WriteLine(Foo.X);
Console.ReadLine();
}
}
output:
0
3
#####
愿你一寸一寸地攻城略地,一点一点地焕然一新
#####
分类:
C#
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)