當(dāng)前位置:
首頁(yè) >
C# 之静态构造器与静态字段初始化器
發(fā)布時(shí)間:2025/5/22
57
如意码农
生活随笔
收集整理的這篇文章主要介紹了
C# 之静态构造器与静态字段初始化器
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
public class Test
{
/// <summary>
/// 靜態(tài)字段初始化器會(huì)在調(diào)用靜態(tài)構(gòu)造器前運(yùn)行。
/// 如果類(lèi)型沒(méi)有靜態(tài)構(gòu)造器,字段會(huì)在類(lèi)型被使用前或運(yùn)行時(shí)中更早的時(shí)間進(jìn)行初始化.
/// 靜態(tài)字段初始化器按照字段聲明的先后順序運(yùn)行。
/// </summary>
public static int X = Y;//靜態(tài)字段初始化器
public static int Y = 3;//靜態(tài)字段初始化器
public static int Z = 6;//靜態(tài)字段初始化器
public static int ZX = Z;//靜態(tài)字段初始化器
/// <summary>
/// 靜態(tài)構(gòu)造器,一個(gè)類(lèi)型只能定義一個(gè)靜態(tài)構(gòu)造器,名稱(chēng)必須和類(lèi)名相同,且沒(méi)有參數(shù)。
/// 運(yùn)行時(shí)將在類(lèi)型使用之前調(diào)用靜態(tài)構(gòu)造器,以下兩種行為可以觸發(fā)靜態(tài)構(gòu)造器執(zhí)行:
/// ·實(shí)例化類(lèi)型
/// ·訪問(wèn)類(lèi)型的靜態(tài)成員
/// </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
輸出結(jié)果正證實(shí)了:靜態(tài)構(gòu)造器只會(huì)執(zhí)行一次。
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
輸出結(jié)果正證實(shí)了:靜態(tài)字段初始化器是按照順序進(jìn)行的。
class Foo
{
/// <summary>
/// 靜態(tài)字段初始化器按照聲明順序運(yùn)行
/// </summary>
public static Foo Instance = new Foo();
public static int X = 3;
Foo()
{
Console.WriteLine(X);
}
}
class ProgramA
{
static void Main()
{
//靜態(tài)字段初始化器在類(lèi)型使用前就運(yùn)行,所以首先是運(yùn)行Instance,
//而Instance正好調(diào)用了實(shí)例構(gòu)造函數(shù),而實(shí)例構(gòu)造函數(shù)打印X,而此時(shí),
//X還沒(méi)有賦值,所以打印出0,而后,才初始化X為3,再在Main()函數(shù)中打印出X,即3
Console.WriteLine(Foo.X);
Console.ReadLine();
}
}
output:
0
3
總結(jié)
以上是生活随笔為你收集整理的C# 之静态构造器与静态字段初始化器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 1.3K star!像拿快递一样传送文件
- 下一篇: C# 控制台程序验证await立即返回