静态构造函数, 静态成员初始化/调用顺序
1)第一次調用類的任何成員之前,執行靜態成員的初始化動作,執行順序是:靜態成員初始化--->靜態構造函數--->調用類的某成員(構造器,靜態字段/屬性/函數,)
2)在創建第一個實例或引用任何靜態成員之前,將自動調用靜態構造函數。調用靜態構造函數之前會先做靜態成員的初始化。同1)。
如果類包含靜態字段,請提供在加載類時初始化這些字段的靜態構造函數。在應用程序域的生存期內,靜態類一直保留在內存中。
總結:創建實例,引用/調用靜態字段/函數會導致CLR 初始化靜態成員和調用靜態構造函數。只是獲取type類型或者沒有關于類的任何引用代碼,靜態成員的初始化和靜態構造函數不會執行。
示例程序,main函數中分別打開TestCast1,2,3,4. 觀察運行結果:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace static_const_readonly
{
class MyClass
{
public static readonly int Count = 0;
public static MyTest TEST = new MyTest();
static MyClass()
{
Console.WriteLine("static MyClass() ctor.");
TEST = new MyTest();
}
public static void FuncStatic()
{
Console.WriteLine("static void FuncStatic().");
}
public MyClass()
{
Console.WriteLine("MyClass() ctor");
}
}
class MyTest
{
public MyTest()
{
Console.WriteLine("My Test ctor.");
}
}
class Program
{
static void TestCast1()
{
Console.WriteLine("test starts.");
MyClass myobject = new MyClass(); // call ctor
}
static void TestCast2()
{
Console.WriteLine("test starts.");
Console.WriteLine("static MyClass.Count = {0}.", MyClass.Count); // get MyClass.Count
}
static void TestCast3()
{
Console.WriteLine("test starts."); // not refer to MyClass
Console.WriteLine(typeof(MyClass));
}
static void TestCast4()
{
Console.WriteLine("test starts."); // not refer to MyClass
MyClass.FuncStatic();
}
static void TestCast5()
{
Console.WriteLine("test starts."); // not refer to MyClass
}
static void Main(string[] args)
{
//TestCast1();
//TestCast2();
//TestCast3();
TestCast4();
// TestCast5();
}
}
}
TestCase1結果:
test starts.
My Test ctor.
static MyClass() ctor.
My Test ctor.
MyClass() ctor
TestCase2結果:
test starts.
My Test ctor.
static MyClass() ctor.
My Test ctor.
static MyClass.Count = 0.
TestCase3結果:
test starts.
static_const_readonly.MyClass
TestCase4結果:
test starts.
My Test ctor.
static MyClass() ctor.
My Test ctor.
static void FuncStatic().
TestCase5結果:
test starts.
總結
以上是生活随笔為你收集整理的静态构造函数, 静态成员初始化/调用顺序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深入理解Solidity
- 下一篇: 英语口语 week14 Friday