C# 依據宣告位置與行為,將變數分為七類:
static 修飾,屬於類別本身,類別載入時建立,程式結束時銷毀。ref 修飾,傳遞變數參考。out 修飾,必須在方法內指派值。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++;
}
}
| 類型 | 初始值 | 存活期 | 備註 |
|---|---|---|---|
| 靜態變數 | 型別預設值 | 應用程式域存活期間 | 建議宣告時指派 |
| 非靜態變數 | 型別預設值 | 實例存活期間 | 建議在建構函式初始化 |
| 陣列元素 | 型別預設值 | 陣列實例存活期間 | |
| 區域變數 | 無(未初始化) | 區塊執行期間 | 使用前必須指派 |
| 值/參考/輸出參數 | 視呼叫端而定 | 方法執行期間 | 第 11 章詳細說明 |
區域變數在宣告之前不可使用:
for (int i = 0; i < 10; i++) {
int num = a; // 錯誤:a 尚未宣告
int a;
int b = a; // 正確
}
這是因為 C# 採用明確指派分析,確保變數在讀取前已被寫入。