1.靜態類與非靜態類
●.靜態類中只能包含靜態成員和靜態方法,否則會丟擲編譯錯誤;
而非靜態類中可以包含非靜態成員和非靜態方法,也可以包含
靜態成員和靜態方法;
●.靜態類不可以例項化;非靜態類可以例項化。不管是靜態類還是
非靜態類,對於靜態成員和靜態方法的呼叫都必須通過類來實現;
●.如果乙個類只包含靜態成員和靜態方法,應該將該類標記為static,
並提供私有的建構函式來避免例項建立,其實這個也是單件模擬的體現;
2靜態建構函式與例項建構函式
靜態建構函式,使用者初始化類中的靜態成員,包括靜態欄位和靜態屬性。
靜態建構函式不能參引數、不能有訪問修飾符也不能為呼叫,通常由.net
執行庫在第一次呼叫類成員之前執行。
●.靜態建構函式,可以和無引數的例項建構函式同存。雖然引數列表相同,
但是二者執行的時間不同,靜態建構函式在執行庫載入類時執行;而例項構造
函式則在例項建立時執行。
●.靜態建構函式,只能對靜態成員進行初始化操作,不能用與非靜態成員;
而例項建構函式,可以初始化例項成員,也可以初始化靜態成員,但是靜態
唯讀字段除外;
●.靜態建構函式只被執行一次,而且.net執行庫也無法確定靜態建構函式什
麼時候被執行;而例項建構函式可以在多次例項建立時被執行多次;
●.乙個類只能有乙個靜態建構函式;而乙個類可以有多個例項建構函式;
●.靜態成員可以在宣告時初始化,也可以通過靜態建構函式進行初始化,
這兩種初始化都只能被執行一次。一般來說,簡單的靜態成員在宣告時初
始化即可,而複雜的靜態成員則選擇在靜態建構函式中進行初始化較佳;
●.建構函式的大體執行順序:分配靜態成員的記憶體空間----執行靜態成員初
始化----執行靜態建構函式----分配物件例項的記憶體空間----執行例項成員
初始化----執行例項建構函式;
3.靜態成員與例項成員
●.靜態成員包含靜態欄位和靜態屬性,靜態字段實現為private,而靜態屬性
一般實現為public,以體現類的封裝原則;
●.靜態成員和類相關聯,不依賴於物件而存在,只能由類訪問;例項成員和
具體物件相關聯,只能由物件例項訪問,而不能由類訪問;
●.靜態成員屬於類所有,無論建立多少例項物件,靜態成員在記憶體中只有乙份;
例項成員屬於類的例項所有,每建立乙個例項物件,例項成員都會在記憶體中分配
一塊記憶體區域;
4靜態方法和例項方法
●.效能上,二者都差不多;
●.靜態方法只能訪問靜態成員和靜態方法,可以間接通過建立例項物件來訪
問例項成員和例項方法;而例項方法可以直接訪問例項成員和例項方法,也可以
直接訪問靜態成員和靜態方法;
●.靜態方法只能由類訪問,例項方法只能有物件例項訪問;
●.靜態方法中不能引用this關鍵字,而例項方法可以;
●.靜態方法不能被標記為virtual、abstract或者override,靜態方法可以被派生
類訪問,但是不能被派生類覆寫。
●.main方法為靜態的,因此main方法中不能直接訪問main所在類的例項方法和例項
成員。●.靜態狀態必須是執行緒安全的。
靜態與非靜態的區別
1.靜態成員優先於物件存在,所以靜態方法不能呼叫非靜態成員,非靜態方法能呼叫靜態與非靜態成員。2.靜態成員屬於類,被物件所共享,可被類和物件直接呼叫,非靜態只屬於當前物件,只能被類的物件呼叫。3.載入時間不同 靜態成員隨類的載入而載入,非靜態只能在物件愛那個被建立後才能載入。4.記憶體儲存區域不同 ...
靜態與非靜態的區別
1.靜態類與非靜態類 靜態類中只能包含靜態成員和靜態方法,否則會丟擲編譯錯誤 而非靜態類中可以包含非靜態成員和非靜態方法,也可以包含 靜態成員和靜態方法 靜態類不可以例項化 非靜態類可以例項化。不管是靜態類還是 非靜態類,對於靜態成員和靜態方法的呼叫都必須通過類來實現 如果乙個類只包含靜態成員和靜態...
靜態與非靜態的區別
最近一直在看 你必須知道的.net 一書,感覺挺不錯,現在把一些內容記錄如下 內容 1.靜態類與非靜態類 靜態類中只能包含靜態成員和靜態方法,否則會丟擲編譯錯誤 而非靜態類中可以包含非靜態成員和非靜態方法,也可以包含 靜態成員和靜態方法 靜態類不可以例項化 非靜態類可以例項化。不管是靜態類還是 非靜...