C#提供多種關鍵字用於定義不同類型的程式結構。這些類型定義關鍵字決定了程式碼的組織方式和行為特性。
namespace(命名空間)
命名空間用於組織和分類程式碼,避免命名衝突。
基本語法
範例
重要特性
- 命名空間可以跨越多個檔案和組件
- 使用
using
關鍵字引入命名空間
- 命名空間通常使用 PascalCase 命名法
- 慣例上使用公司和專案名稱作為命名空間名稱
class(類別)
類別是 C# 中最基本的參考型別,用於封裝資料和行為。
基本語法
範例
重要特性
- 類別是參考型別
- 類別支援繼承(單一繼承)
- 可實作多個介面
- 可定義靜態和非靜態成員
- 使用
new
關鍵字建立執行個體
struct(結構)
結構是值型別,適用於小型、不需要繼承的資料結構。
基本語法
範例
重要特性
- 結構是值型別(存儲在堆疊上)
- 結構無法繼承自其他結構或類別,但可實作介面
- 結構預設提供無參數建構函式
- 結構成員不能宣告為
protected
- 結構在傳遞時作為值複製,而非參考
- 適合小型、輕量和不可變的數據類型
interface(介面)
介面定義了一組相關功能的契約,由類別或結構實作。
基本語法
範例
重要特性
- 介面只包含成員的宣告,不包含實作(C# 8.0 以前)
- C# 8.0 引入預設介面方法
- 類別和結構可實作多個介面
- 介面可以繼承自其他介面
- 介面名稱慣例上以「I」開頭
- 介面成員預設為
public
,不能指定存取修飾詞
enum(列舉)
列舉定義一組具名常數值,提高程式碼的可讀性。
基本語法
範例
重要特性
- 列舉預設基底型別為
int
- 可指定基底型別為
byte
、sbyte
、short
、ushort
、int
、uint
、long
或ulong
- 列舉常數值默認從 0 開始遞增
- 可手動設定列舉常數值
- 支援位元旗標(使用
[Flags]
屬性標記)
record(記錄)- C# 9.0+
記錄是一種參考型別,專為不可變數據設計,具有值語義。
基本語法
範例
重要特性
- 記錄預設實作值相等性(而非參考相等性)
- 自動實作解構功能
- 提供
with
表達式進行非破壞性修改
- 支援繼承(但記錄只能繼承自記錄)
- 預設生成
ToString
、Equals
、GetHashCode
等方法
- 適合用作數據傳輸物件(DTO)和不可變數據模型
delegate(委派)
委派是指向方法的類型安全參考,用於實作事件和回呼。
基本語法
範例
重要特性
- 委派是參考型別
- 委派可以多播(註冊多個方法)
- 委派是類型安全的函數指標
- 委派是事件的基礎
- C# 提供了泛型委派如
Action
、Func
和Predicate
- 委派可以使用匿名方法和 Lambda 表達式
泛型型別定義
泛型提供了型別參數化的能力,實現型別安全和代碼重用。
基本語法
範例
型別約束
where T : struct
- T 必須是實值型別
where T : class
- T 必須是參考型別
where T : notnull
- T 必須是非 null 型別
where T : unmanaged
- T 必須是非受控型別
where T : new()
- T 必須有公共無參數建構式
where T : <基底類別名稱>
- T 必須是指定基底類別的衍生類別
where T : <介面名稱>
- T 必須實作指定介面
where T : U
- T 必須是或實作參數 U
重要特性
- 泛型提供編譯期的型別安全
- 避免型別轉換和裝箱/拆箱操作
- 可應用於類別、結構、介面、委派和方法
- 支援型別約束限制型別參數
- 提高程式碼重用性和效能