還記得我們在Hello World!時期就有見過static這傢伙了嗎?我們今天終於要來面對它了!XD
static是一個修飾詞,用來宣告靜態成員,可以與類別、欄位、方法、屬性、運算子、事件和建構函式搭配使用。
先說結論,以我目前的理解,我覺得宣告成static最重要的影響有三點:
一開始載入時就存在,就佔據記憶體
不能也不用new就可以使用
(因為已經占據記憶體了)- static的成員是大家
共享
的(使用同一區記憶體)
於是衍生出的優缺點如下:
以下來進行細部的介紹
以下參考一秒看破 static例子
先來設定兩個類別,靜態類別僅包含靜態成員,一般類別也可以有靜態類別
public static class staticClass
{
public static int price;//靜態類別僅包含靜態成員
public static void getPrice() { }
}
public class notStaticClass
{
public int price;
public void getPrice() { }
public static void getPriceStatic() { }//一般類別也可以包含靜態成員
private static int price00;
public int price1
{
get { return price00; }
set { price00 = value; }
}
}
1.靜態成員不用new可以直接叫用變數或方法,一般成員需要new實體化物件後才能叫用變數或方法
2.靜態方法屬於類別
所有(就算非靜態類別亦同),叫用前要打類別名稱notStaticClass,即使不屬於此類別,大家也都可以執行。
一般方法只有該類別
的實體化後物件
才能叫用
彥佐涼大大這個例子真的很棒:
例如一個公開類別名叫"我"有個方法叫"叫我起床"
如果他是靜態方法,那誰都可以叫我起床
如果他是非靜態方法,只有我可以叫我自己起床,沒人幫的了我
3.就算宣告了不同的物件,靜態變數仍然是共享
的,調整都會變動到
輸出結果,兩個都變成10了!!!!
靜態成員在記憶體只會保留一份,所以可以在同類別的物件之間傳遞資料
一般建構函式與靜態建構函式比較如下:
建構函式 | 靜態建構函式 | |
---|---|---|
與類別同名稱 | 是 | 是 |
初始化物件 | 是 | 否 |
存取修飾詞 | public | 不能使用 |
是否有參數 | 可以選擇 | 不能有參數 |
是否有參數 | 可以多次呼叫 | 只會執行一次 |
(圖表來源:從零開始學Visual C# 2015程式設計)
C#學習筆記-static到底是神馬鬼東西?
一秒看破static
MSDN-靜態類別和靜態類別成員
MSDN-static
書籍:
從零開始學Visual C# 2015程式設計