Professional Documents
Culture Documents
靜態類別和靜態類別成員 - 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
靜態建構函式
一般建構函式與靜態建構函式比較如下:
建構函式 靜態建構函式
與類別同名稱 是 是
初始化物件 是 否
(圖表來源:從零開始學Visual C# 2015程式設計)
參考資料
C#學習筆記-static到底是神馬鬼東西?
一秒看破static
MSDN-靜態類別和靜態類別成員
MSDN-static
書籍:
從零開始學Visual C# 2015程式設計
留言1
追蹤
檢舉
1 則留言
表格的標題好像對錯欄了?
回應 1
3/4
檢舉
登入發表回應
我要留言
立即登入留言
4/4