靜態變數使用 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語言 是以檔案為單位來組織的,在乙個...