You are on page 1of 4

C#-傳說中的static!!!

靜態類別和靜態類別成員 - iT 邦幫忙::
一起幫忙解決難題,拯救 IT 人的一天
ithelp.ithome.com.tw/articles/10213238

第 11 屆 iT 邦幫忙鐵人賽

DAY 23

還記得我們在Hello World!時期就有見過static這傢伙了嗎?我們今天終於要來面對它了!XD

什麼是Static?
static是一個修飾詞,用來宣告靜態成員,可以與類別、欄位、方法、屬性、運算子、事件
和建構函式搭配使用。

先說結論,以我目前的理解,我覺得宣告成static最重要的影響有三點:

1. 一開始載入時就存在,就佔據記憶體
2. 不能也不用new就可以使用 (因為已經占據記憶體了)
3. static的成員是大家 共享 的(使用同一區記憶體)

於是衍生出的優缺點如下:

優點:
若使用在公用變數,可以共享記憶體
若使用在公用方法,大家都可以叫用
缺點:
無論有沒有使用,它一開始就佔據記憶體空間。
因為共享很難控制存取權限

以下來進行細部的介紹

靜態成員特性
靜態類別僅包含靜態成員
不能使用new實體化
屬密封類別,無法被繼承
沒有執行個體,只能使用私有的建構函式,或者配合靜態建構函式
一般方法只有該類別實體可以叫用,靜態方法使用類別名稱後大家都可以叫用

以下參考一秒看破 static例子

先來設定兩個類別,靜態類別僅包含靜態成員,一般類別也可以有靜態類別

1/4
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了!!!!

靜態成員在記憶體只會保留一份,
所以可以在同類別的物件之間傳遞
資料

2/4
靜態建構函式
一般建構函式與靜態建構函式比較如下:

建構函式 靜態建構函式

與類別同名稱 是 是

初始化物件 是 否

存取修飾詞 public 不能使用

是否有參數 可以選擇 不能有參數

是否有參數 可以多次呼叫 只會執行一次

(圖表來源:從零開始學Visual C# 2015程式設計)

參考資料
C#學習筆記-static到底是神馬鬼東西?
一秒看破static
MSDN-靜態類別和靜態類別成員
MSDN-static
書籍:
從零開始學Visual C# 2015程式設計

留言1
追蹤

檢舉

1 則留言

表格的標題好像對錯欄了?

回應 1

3/4
檢舉

CynthiaChuang iT邦新手 5 級 ‧ 2019-09-25 22:56:29


已修改~感謝提醒=)

登入發表回應

我要留言

立即登入留言

4/4

You might also like