c 的靜態變數和靜態函式

2021-09-07 23:40:04 字數 1629 閱讀 3500

靜態變數使用 static 修飾符進行宣告,在類被例項化時建立,通過類進行訪問不帶有 static 修飾符宣告的變數稱做非靜態變數。

static變數在物件被例項化時建立,通過物件進行訪問乙個類的所有例項的同一c#靜態變數都是同乙個值,同乙個類的不同例項的同一非靜態變數可以是不同的值。

靜態函式的實現裡不能使用非靜態成員,如非靜態變數、非靜態函式等。

class statictest

public void sety(int a)

public void print()

y = ", x, y);

}static void main(string args)

{statictest st = new statictest();

statictest st1 = new statictest();

st.setx(10);      //將10賦給x;

st.sety(10);      //將10賦給y;

st.print();                  //顯示:x=10 y=10

st1.setx(20);      //將20賦給x

st1.sety(20);     //將20賦給x

st1.print();                //顯示:x=20 y=20

st.print();                  //由於x是靜態變數,所以在此呼叫第一次初始化例項st時,靜態變數已經變為20, 輸出:x=20 y=10

st.setx(30);      

st.sety(30);        

st.print();       //由於x是靜態變數,所以在此呼叫初始化例項st時,靜態變數已經變為30, 輸出:x=30 y=30

st1.print();                //由於x是靜態變數,所以在此呼叫st1例項時,靜態變數已經變為30, 輸出:x=30 y=20

靜態類:

宣告為static,它僅包含靜態成員,不能用new靜態類的例項。使用靜態類來包含不與特定物件關聯的方法。

功能:僅包含靜態成員,不能被例項化,是密封的,不能包含例項建構函式,可包含靜態建構函式以分配初始值或設定某個靜態變數。

優點:編譯器能夠執行檢查以確保不致偶然地新增勢力成員。編譯器將保證不會建立此類的例項。

靜態方法:

是一種特殊的成員方法,不屬於類的某乙個具體的例項。非靜態方法可以訪問類中的任何成員,而靜態只能訪問類中的靜態成員。

靜態建構函式:

c#靜態方法及屬性在程式啟動的時候,就全部裝入記憶體的,而不管這些方法、屬性以後有沒有用到。即使是沒有人再訪問程式,這部分記憶體仍然不會釋放還有就是,所有訪問者看到的靜態屬性的資料幾乎都是一樣的,比如a使用者設定了username這個屬性,b使用者訪問的時候,得到的username仍然是a使用者設定的那個。這種特性,如果用在固定資料中,那不會有太大問題,比如連線字串之類的

c#靜態方法/資料成員是屬於類的,不是屬於某乙個物件的,因而呼叫它不需要例項化;靜態方法和靜態資料成員相當於共享變數。為該類的所有物件所共有,因而在需要共享資料時,定義這種型別時很好的選擇。 一但定義乙個類後(不一定要例項化物件)該類的所有靜態成員就載入記憶體(並不是程式啟動,就裝入記憶體,沒有定義該類時它不會載入記憶體) 靜態成員的作用域與它所屬的類的作用域相同

靜態變數和靜態函式

靜態變數 靜態變數使用 static 修飾符進行宣告 在所屬類被裝載時建立 通過類進行訪問 所屬類的所有例項的同一靜態變數都是同乙個值 非靜態變數 不帶有 static 修飾符宣告的變數稱做非靜態變數 在類被例項化時建立 通過物件進行訪問 同乙個類的不同例項的同一非靜態變數可以是不同的值 在c 中,...

靜態函式和靜態變數

記憶體大致可以劃分為 棧區堆區 全域性 靜態區 常量區 區 其中棧區位於高位址,區位於低位址。區 存放程式 段 常量區 存放各種常量 數值常量和字串常量等 全域性 靜態區 存放全域性變數和靜態變數,未初始化的和初始化的分開存放 堆區 使用new就是在該區申請 棧區 存放區域性變數等 a.件 clas...

c語言靜態變數和靜態函式

static c語言 c語言程式可以看成由一系列外部物件構成,這些外部物件可能是變數或函式。而內部變數是指定義在函式內部的函式引數及變數。外部變數定義在函式之外,因此可以在許多函式中使用。由於c語言不允許在乙個函式中定義其它函式,因此函式本身只能是 外部的 由於c語言 是以檔案為單位來組織的,在乙個...