C# 之静态构造器与静态字段初始化器
生活随笔
收集整理的這篇文章主要介紹了
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# 之静态构造器与静态字段初始化器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1.3K star!像拿快递一样传送文件
- 下一篇: 47.9K star!全平台开源笔记神器