C#靜態建構函式及靜態變數學習

iDotNetSpace發表於2009-04-27

靜態建構函式:

(1)用於對靜態欄位、只讀欄位等的初始化。              

(2)新增static關鍵字,不能新增訪問修飾符,因為靜態建構函式都是私有的。        

(3)類的靜態建構函式在給定應用程式域中至多執行一次:只有建立類的例項或者引用類的任何靜態成員才激發靜態建構函式

(4)靜態建構函式是不可繼承的,而且不能被直接呼叫。            

(5)如果類中包含用來開始執行的 Main 方法,則該類的靜態建構函式將在呼叫 Main 方法之前執行。    

(6)任何帶有初始值設定項的靜態欄位,則在執行該類的靜態建構函式時,先要按照文字順序執行那些初始值設定項。  

(7)如果沒有編寫靜態建構函式,而這時類中包含帶有初始值設定的靜態欄位,那麼編譯器會自動生成預設的靜態建構函式。

 經典例子:

 

 

 1/**//**************************************************
 2* 靜 態 構 造 函 數 練 習
 3* (1)①②③……為執行順序
 4* (2)輸出結果: static A()
 5* static B()
 6* X = 1, Y = 2
 7***************************************************/
 8using System;
 9class A
10{
11public static int X;
12
13static A() //④ 執行完後返回到③
14{
15X = B.Y + 1;
16Console.WriteLine("static A()");
17}
18}
19
20class B
21{
22public static int Y = A.X + 1; //③ 呼叫了A的靜態成員,
23// 轉到A的靜態建構函式----&gt
24
25static B() //② 如果帶有初始值設定項的靜態欄位,
26// 執行該類的靜態建構函式時,
27// 先要按照文字順序執行那些初始值設定項。
28// 轉到初始值設定項----&gt
29{
30Console.WriteLine("static B()");
31}
32
33static void Main() //① 程式入口,
34// 如果類中包含用來開始執行的 Main 方法,
35// 該類的靜態建構函式將在呼叫 Main 方法之前執行。
36// 轉到B的靜態建構函式----&gt
37{
38Console.WriteLine("X = {0}, Y = {1}", A.X, B.Y);//⑤ 輸出結果
39Console.ReadLine();
40}
41}

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-591960/,如需轉載,請註明出處,否則將追究法律責任。

相關文章