首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 靜態與非靜態成員:記憶體佈局、存取規則、實例 vs 類別擁有權完整對比

     編輯:關於C語言

靜態成員(static)屬於類別本身;非靜態成員屬於每個實例。兩者在記憶體佈局與存取規則上有本質差異。

程式碼驗證


class Test {
    int x;          // 非靜態
    static int y;   // 靜態

    void F() { x=1; y=1; }           // ✅ 非靜態方法可存取兩者
    static void G() { /*x=1;*/ y=1; } // ❌ 靜態方法不可存取非靜態 x

    static void Main() {
        Test t = new Test();
        t.x = 1;  // ✅ 實例存取非靜態
        // t.y = 1; // ❌ 實例存取靜態(建議類別名存取)
        // Test.x = 1; // ❌ 類別存取非靜態
        Test.y = 1; // ✅ 類別存取靜態
    }
}

記憶體佈局差異

非靜態成員靜態成員
擁有者實例類別
記憶體拷貝數每實例一份整個 AppDomain 一份
存取路徑instance.MemberType.Member(推薦)
靜態方法中存取❌ 無 this✅ 共享單一拷貝

設計指引

  • 狀態屬於個別物件 → 非靜態。
  • 狀態屬於型別全域、或無狀態純功能 → 靜態。
  • 避免在實例程式碼中用 instance.StaticMember(編譯警告 CS0179)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved