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

叩響 C# 之門:委派概念圖解入門

     編輯:關於C#

本文原為圖解教學,僅包含概念示意圖,無文字敘述。以下補充核心概念文字說明,配合原圖食用更佳。

委派是什麼?

委派是型別安全的函式指標。它封裝「方法簽章」(參數清單 + 回傳型別),讓方法可像物件一樣被指派、傳遞、呼叫。

核心特性

  • 型別安全: 編譯期檢查參數/回傳型別匹配,避免 C/C++ 函式指標的執行期崩潰。
  • 多播: 一個委派實例可串連多個方法 (+=),依序呼叫。
  • 不可變: `+=`/`-=` 實際產生新委派實例,原實例不變。
  • 支援靜態/實例方法、Lambda、匿名方法。

宣告與使用


// 1. 宣告委派型別
public delegate int Calculate(int a, int b);

// 2. 目標方法
public int Add(int a, int b) => a + b;
public int Mul(int a, int b) => a * b;

// 3. 實例化與呼叫
Calculate calc = Add;          // 方法群組隱含轉換
int result = calc(3, 4);       // 7

// 4. 多播
calc += Mul;                   // 串連
// 呼叫時依序執行,回傳值為最後一個方法的結果
result = calc(3, 4);           // 12 (Mul 的結果)

// 5. 移除
calc -= Add;
result = calc(3, 4);           // 12

內建委派:Func / Action / Predicate

委派簽章用途
Func<T1, T2, TResult>(T1, T2) → TResult有回傳值的運算
Action<T1, T2>(T1, T2) → void無回傳值的動作
Predicate<T>T → bool條件判斷 (如 List.Find)

Func f = (a, b) => a + b;
Action log = s => Console.WriteLine($"[LOG] {s}");
Predicate isEven = n => n % 2 == 0;

委派 vs 介面

維度委派介面
封裝對象單一方法方法群合約
實作方式方法群組/Lambda類別實作
狀態攜帶閉包捕獲區域變數類別欄位
多播原生支援需自行實作 (觀察者模式)

原圖對應說明

  • 委派基本概念圖 → 委派像「遙控器」,按鈕對應方法簽章,按下即執行連結的方法。
  • 多播委派鏈結圖 → 多播鏈結:d = M1; d += M2; d += M3; 呼叫 d() 依序執行 M1→M2→M3。
  • Lambda 簡化委派建立 → Lambda `() => ...` 是匿名方法語法糖,自動推斷委派型別。
  • 委派作為參數傳遞 → 策略模式:void Process(Func<int,int> strategy) 將演算法外部化注入。

委派是 C# 函數式程式設計的基石,也是事件、LINQ、非同步、策略模式的底層支撐。理解「型別安全的方法容器」這一本質,即可靈活運用於各種解耦場景。

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