標籤:style blog http color 使用 io art ar
靜態變數與非靜態變數的區別如下:
1.記憶體配置
靜態變數在應用程式初始化時,就存在於記憶體當中,直到它所在的類的程式運行結束時才消亡;
而非靜態變數需要被執行個體化後才會分配記憶體。
2.生存周期
靜態變數生存周期為應用程式的存在周期;
非靜態變數的存在周期取決於執行個體化的類的存在周期。
3.調用方式
靜態變數只能通過“類.靜態變數名”調用,類的執行個體不能調用;
非靜態變數當該變數所在的類被執行個體化後,可通過執行個體化的類名直接存取。
4.共用方式
靜態變數是全域變數,被所有類的執行個體對象共用,即一個執行個體的改變了靜態變數的值,其他同類的執行個體讀到的就是變化後的值;
非靜態變數是局部變數,不共用的。
5.訪問方式
靜態成員不能訪問非靜態成員;
非靜態成員可以訪問靜態成員。
靜態變數在類裝載的時候分配記憶體,以後建立的對象都使用的該記憶體,相應的操作也就是對這塊記憶體進行操作。也可以看作是另類的全域變數。
在WebSerivice中想只進行一次初始化,而不用每次都進行初始化這樣佔用大量資源。還可以對調用的服務進行管理,比如想把每次調用的服務進行排隊執行,可以將想應資訊放到Arraylist中,靜態時鐘中排隊執行。
下面轉一篇對靜態變數的文章。
C#靜態建構函式及靜態變數
靜態建構函式: (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的靜態建構函式----> 24 25static B() //② 如果帶有初始值設定項的靜態欄位, 26// 執行該類的靜態建構函式時, 27// 先要按照文本順序執行那些初始值設定項。 28// 轉到初始值設定項----> 29{ 30Console.WriteLine("static B()"); 31} 32 33static void Main() //① 程式入口, 34// 如果類中包含用來開始執行的 Main 方法, 35// 該類的靜態建構函式將在調用 Main 方法之前執行。 36// 轉到B的靜態建構函式----> 37{ 38Console.WriteLine("X = {0}, Y = {1}", A.X, B.Y);//⑤ 輸出結果 39Console.ReadLine(); 40} 41} ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 關於C#靜態建構函式的幾點說明 靜態建構函式是C#的一個新特性,其實好像很少用到。不過當我們想初始化一些靜態變數的時候就需要用到它了。這個建構函式是屬於類的,而不是屬於哪裡執行個體的,就是說這個建構函式只會被執行一次。也就是在建立第一個執行個體或引用任何靜態成員之前,由.NET自動調用。 class SimpleClass { // Static constructor static SimpleClass() { // } }
在使用靜態建構函式的時候應該注意幾點:
1、靜態建構函式既沒有存取修飾詞,也沒有參數。因為是.NET調用的,所以像public和private等修飾符就沒有意義了。 2、是在建立第一個類執行個體或任何靜態成員被引用時,.NET將自動調用靜態建構函式來初始化類,也就是說我們無法直接調用靜態建構函式,也就無法控制什麼時候執行靜態建構函式了。
3、一個類只能有一個靜態建構函式。
4、無參數的建構函式可以與靜態建構函式共存。儘管參數列表相同,但一個屬於類,一個屬於執行個體,所以不會衝突。
5、最多隻運行一次。
6、靜態建構函式不可以被繼承。
7、如果沒有寫靜態建構函式,而類中包含帶有初始值設定的靜態成員,那麼編譯器會自動產生預設的靜態建構函式。 |