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

C# 語言基礎完全指南:型別系統、變數常數、運算子、命名空間與陳述式

     編輯:關於C#

前言:型別安全是 C# 的基石

C# 是強型別、靜型別、物件導向語言。所有值皆為物件(透過裝箱/解箱),型別系統嚴格區分實值型別與參考型別。本文系統整理 C# 核心型別分類、變數/常數語意、運算子與特殊運算子、命名空間組織、陳述式分類與控制流程。

一、型別系統:實值型別 vs 參考型別

1.1 記憶體語意差異

特性實值型別參考型別
儲存內容直接包含資料位元參考(指標)指向堆上物件
配置位置執行緒堆疊 / 內嵌於物件托管堆
指派語意複製值(獨立副本)複製參考(共享同一物件)
預設值全 0 位元模式(0/false/\0)null
繼承隱含繼承 System.ValueType → Object,密封單根繼承 Object
範例int、struct、enum、tupleclass、interface、delegate、array、string

1.2 內建簡單型別對照表

C# 關鍵字CLR 型別大小/範圍常值尾碼
sbyteSystem.SByte8-bit 有號-
byteSystem.Byte8-bit 無號-
shortSystem.Int1616-bit 有號-
ushortSystem.UInt1616-bit 無號-
intSystem.Int3232-bit 有號-
uintSystem.UInt3232-bit 無號U/u
longSystem.Int6464-bit 有號L/l
ulongSystem.UInt6464-bit 無號UL/ul
floatSystem.Single32-bit IEEE 754F/f
doubleSystem.Double64-bit IEEE 754D/d(預設)
decimalSystem.Decimal128-bit 10 進制 28-29 位有效數字M/m
boolSystem.Booleantrue/false-
charSystem.Char16-bit Unicode'c'
stringSystem.String不可變字串"text"/@\"verbatim\"

1.3 裝箱與解箱


int i = 42;
object o = i;        // 裝箱:配置堆上物件,複製值
int j = (int)o;      // 解箱:驗證型別,複製值回堆疊
// 頻繁裝箱造成 GC 壓力 → 使用泛型/介面避免

二、變數與常數

2.1 七種變數分類

  1. 靜態變數:static 欄位,型別載入時配置,應用程式域存活期間存在。
  2. 實例變數:非 static 欄位,實例建立時配置,實例回收時釋放。
  3. 實值參數:無修飾符參數,呼叫時複製值/參考。
  4. 參考參數:ref 參數,別名傳遞,雙向同步。
  5. 輸出參數:out 參數,呼叫端無需初始化,方法內必須指派。
  6. 參數陣列:params 參數,封裝可變引數為陣列。
  7. 區域變數:方法/區塊內宣告,作用域限於區塊,生命週期隨方法執行。

2.2 常數 const vs 唯讀 readonly

  • const:編譯期常數,IL 內嵌常值,型別限制嚴格(簡單型別、string、enum、null),隱含 static。
  • readonly:執行期常數,宣告或建構函式指派,型別無限制,可為實例/靜態。
  • 版本控制:修改 const 需重編譯所有呼叫端;readonly 僅需重編譯定義組件。

三、運算子與特殊運算子

3.1 運算子分類與優先序(高→低)

  1. 主要:x.y f(x) a[x] x++ x-- new typeof checked unchecked default nameof delegate sizeof stackalloc x->y
  2. 一元:+ - ! ~ ++x --x (T)x await
  3. 乘法:* / %
  4. 加法:+ -
  5. 位移:<< >>
  6. 關係/型別測試:< > <= >= is as
  7. 等值:== !=
  8. 邏輯 AND:&
  9. 邏輯 XOR:^
  10. 邏輯 OR:|
  11. 條件 AND:&&
  12. 條件 OR:||
  13. Null 聯合:??
  14. 條件:?:
  15. 指派:= += -= *= /= %= &= |= ^= <<= >>= ??=
  16. Lambda:=>

3.2 C# 特有關鍵運算子

運算子功能範例
is型別模式比對(C# 7+ 支援模式)obj is int i、obj is Person { Age: > 18 }
as安全轉型,失敗回傳 null(僅參考/可為 null 型別)var s = obj as string;
typeof取得 System.Type 物件(編譯期)typeof(int)、typeof(List<string>)
nameof取得符號名稱字串(重構安全)nameof(Console.WriteLine)
default型別預設值字面值default(int)、default(T)
sizeof非受控記憶體大小(需 unsafe)sizeof(Point)
stackalloc堆疊配置記憶體區塊(需 unsafe,C# 7.2+ 可用 Span<T> 安全包裝)Span<byte> buf = stackalloc byte[256];
?? / ??=Null 聯合運算子 / 指派var s = obj ?? "預設";、obj ??= new Obj();
?. / ?[]Null 條件運算子obj?.Method()、arr?[0]

3.3 運算子多載

  • 可多載:+ - * / % & | ^ << >> == != < > <= >= ! ~ true false
  • 不可多載:= . ?: ?? ??= && || new typeof is as checked unchecked default nameof sizeof stackalloc
  • 規則:public static、至少一個參數為定義型別、成對多載(==/!=、</> 等)。

四、命名空間與 using 指示詞

4.1 命名空間組織


namespace MyCompany.MyProduct.Feature {
    public class MyClass { }
}
// 巢狀等同於
namespace MyCompany.MyProduct {
    namespace Feature {
        public class MyClass { }
    }
}

4.2 using 三種用法

  1. 指示詞:using System; → 簡化型別名稱(Console 代替 System.Console)。
  2. 別名指示詞:using Json = System.Text.Json; → 解決名稱衝突、縮短長命名空間。
  3. 靜態導入(C# 6+):using static System.Console; → 直接呼叫 WriteLine()、存取 Math.PI。

五、陳述式分類與控制流程

類別關鍵字說明
標籤label: goto label;方法內跳轉(慎用)
宣告int x = 1; var y = Foo();可含初始化,var 隱含型別
區塊{ ... }界定區域變數作用域
空白;無語意
運算式x = y + z; Method();以分號結尾
選擇if/else switch switch 表達式 (C# 8+)switch 支援模式比對、when 守衛
迭代while do-while for foreachforeach 需 IEnumerable/GetEnumerator
跳躍break continue goto return throwthrow 拋出例外
例外處理try/catch/finally結構化例外,finally 保證執行
檢查溢位checked/unchecked 區塊/運算式整數溢位行為控制
鎖定lock(obj) { }Monitor.Enter/Exit 語法糖
資源處置using (var d = new Disposable()) { }IDisposable.Dispose() 語法糖 (C# 8+ 可省略區塊)
非同步await yield return yield break非同步/迭代器語法糖

六、現代 C# 精華:模式比對、記錄、全域 using、檔案區域型別

  • 模式比對:is、switch、property pattern、tuple pattern、list pattern (C# 11)。
  • record:不可變參考型別,值相等、with 表達式、解構。
  • global using (C# 10+):專案層級匯入,減少重複。
  • file-local types (C# 11+):file class Helper { } 僅單一檔案可見。
  • required members (C# 11+):強制物件初始化器指派。

結語

C# 型別系統嚴格區分實值/參考語意,變數分類精確對應生命週期,運算子豐富且可多載,命名空間與 using 提供模組化組織,陳述式涵蓋命令式與現代函數式風格。掌握核心語法語意、善用模式比對簡化條件邏輯、採用 record/readonly struct 表達不可變資料、遵循 IDisposable/using 管理資源,即能寫出型別安全、表達力豐富、效能可預期的專業 C# 程式碼。

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