Static 淺談

Static 淺談

static 修飾詞常用在 class、variable 或 method 等, 下列為 static 特性(C# 與 Java 相同):

1. 而靜態成員屬於類別本身,並不隸屬任何一個物件

   Ex: 存取 static 全域變數時, 只需要"類別名稱.全域變數"即可存取

{
    public static string str = "123";
    public void testMethod
    {
         //此處可直接存取 str 變數, 
         //因為 str 已屬於類別本身, 
         //而目前所在位置也在此列別中, 
         //因此可忽略類別名稱直接存取
    }
}

class Test2
{
    public void testMethod
    {
        /*類別名稱.全域變數 即可存取*/
        Test1.str // 123
    }
}

但如果是 static method 存取非 static 全域變數就無法直接使用"類別名稱.全域變數"來存取

{
    public tring str = "123";
    public static void testMethod
    {
        /*
           testMethod 屬於類別本身, 
           因此靜態方法無法存取非靜態的全域變數
         */
    }
}

class Test2
{
    public void testMethod
    {
        /*Test1 的 str 變數不是靜態的, 因此只能透過 new 存取*/
        new Test1().str //123
    }
}

簡單來說, 以全域變數為例如果不考慮存取修飾詞, 靜態的全域變數(類別層級)可以供所有物件存取, 非靜態的全域變數只能供非類別層級的物件存取

2. 如果類別套用了 static 關鍵字,則此類別的所有成員必定為靜態

3. static 可用在 classes, fields, methods, properties, operators, events, and constructors