C#中靜態建構函式的一些理解

來源:互聯網
上載者:User

首先,先看一張結論表

If(有類顯式靜態建構函式)
{
If(有訪問靜態成員)
{
在進入Main函數之後,第一次訪問靜態成員之前,先調用靜態建構函式,以後將不再調用靜態建構函式,同一個靜態建構函式最多隻能調用一次。
}
Else
{
不調用該類靜態建構函式
}
}
Else
{
If(有訪問靜態成員)
{
在執行Main函數中的代碼之前,先調用靜態建構函式,以後將不再調用靜態建構函式,同一個靜態建構函式最多隻能調用一次。
}
Else
{
不調用該類靜態建構函式
}
}

1.下面先來驗證一下上面的結論

public class Class_1    {        public static int i;        static Class_1()   //顯式定義靜態建構函式        {            Console.WriteLine("Class_1:顯示定義了靜態建構函式");            i = 1;        }    }    public class Class_2    {        public static int i = Init(2);  //沒有顯式定義靜態建構函式        public static int Init(int j)        {            Console.WriteLine("Class_2:沒有顯示定義了靜態建構函式");            return j;        }    }    public class MainClass    {        static void Main()        {            //分別分析以下幾種情況的結果        }   }
1. 顯示定義了靜態建構函式,且有訪問靜態成員

static void Main()
{
///1.顯示定義靜態建構函式 2.有訪問Class_1中的靜態成員i
Console.WriteLine("Start In Main:");
Console.WriteLine(Class_1.i);
}

結果如下:

Start In Main:
Class_1:顯示定義了靜態建構函式
12. 顯示定義了靜態建構函式,且沒有訪問靜態成員
static void Main()
{
///1.顯示定義靜態建構函式 2.沒有訪問Class_1中的靜態成員i
Console.WriteLine("Start In Main:");
}

結果如下:
Start In Main:3. 沒有顯示定義了靜態建構函式,且有訪問靜態成員
static void Main()
{
///1.沒有顯示定義靜態建構函式 2.有訪問Class_2中的靜態成員i
Console.WriteLine("Start In Main:");
Console.WriteLine(Class_2.i);
}
結果如下:
Class_2:沒有顯示定義了靜態建構函式
Start In Main:
24.沒有顯示定義靜態建構函式,且沒有訪問靜態成員
static void Main()
{
///1.沒有顯示定義靜態建構函式 2.沒有訪問Class_2中的靜態成員
Console.WriteLine("Start In Main:");
}
結果如下:
Start In Main:

 參考資料:

  1.關於Type Initializer和 BeforeFieldInit的問題,看看大家能否給出正確的解釋(http://www.cnblogs.com/artech/archive/2008/11/01/1324280.html)

      2.通過七個關鍵編程技巧得益於靜態內容(http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/us0501StaticsinNET.mspx?mfr=true)

      3.靜態建構函式的執行時機(http://www.cnblogs.com/happyhippy/archive/2007/04/04/710936.html)

      4.品味細節,深入.NET的類型構造器(http://www.cnblogs.com/anytao/archive/2008/11/02/must_net_23.html)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.