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

C# 變數分類全解析:七大類型的生命週期、作用域與初始化規則

     編輯:關於C語言

C# 依據宣告位置與修飾詞,將變數劃分為七大類別。理解各類別的生命週期、作用域與初始化語意,是撰寫正確、高效程式碼的關鍵。

七大變數類型對照表

類別關鍵字/位置生命週期預設初始化指派檢查
靜態變數static 修飾類別載入 ~ 程式結束型別預設值編譯期檢查
非靜態變數(實例欄位)類別內、無 static實例建立 ~ GC 回收型別預設值建構函式檢查
陣列元素陣列建立時陣列實例存活期間型別預設值建立時檢查
值參數方法參數、無修飾方法呼叫 ~ 返回呼叫端必須指派呼叫端檢查
參考參數ref 修飾同上呼叫端必須已指派呼叫端檢查
輸出參數out 修飾同上方法內必須指派方法內檢查
區域變數區塊/迴圈/using 內進入區塊 ~ 離開區塊無自動初始化使用前必須指派

關鍵差異深度解析

靜態 vs 非靜態(實例)變數

  • 靜態:屬於型別本身,AppDomain 存活期間僅有一份拷貝。建議宣告時直接指派 static int Count = 0;。
  • 實例:每個 new 出的物件各自擁有獨立拷貝。結構體的實例欄位隨結構體變數生存期同步。

區域變數的特殊規則

  • 無預設值:int x; Console.WriteLine(x); → 編譯錯誤 CS0165。
  • 宣告前不可用:
for (int i = 0; i < 10; i++) {
    int num = a; // 錯誤:a 尚未宣告
    int a = 5;
    int b = a;   // 正確
}

參數三兄弟(留待第 11 章詳細講解)

  • ref:雙向傳遞,呼叫端變數必須已初始化。
  • out:單向輸出,方法內必須指派值才能返回。
  • params:可變參數陣列,內部視為陣列元素變數。

範例程式碼對照

class A {
    public static int x;        // 靜態變數
    int y;                      // 非靜態變數
    void F(int[] v, int a, ref int b, out int c) {
        int i = 1;              // 區域變數
        c = a + b++;            // out 參數必須指派
    }
}

掌握這七類變數的語意差異,能有效避免「未指派變數」、「意外共享狀態」、「結構體複製語意誤解」等常見缺陷。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved