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

C# 委派 深度解析:從定義、實例化到調用的完整圖解

     編輯:關於C#

什麼是委派?

委派是一種型別安全的函式指標。你可以把它想像成一個「方法的容器」:定義委派型別時,同時宣告了它能裝載的方法簽章(回傳型別、參數列表);實例化時,將符合簽章的方法「裝進去」;之後透過委派實例呼叫,實際執行的就是該方法。

定義與實例化對比


// 普通類別
public class UserInfo { }

// 委派型別:回傳 void,參數 (object, EventArgs)
public delegate void EventHandler(object sender, EventArgs e);

// 實例化
UserInfo user = new UserInfo();           // new 類別
EventHandler handler = new EventHandler(MyMethod); // new 委派,傳方法名
// 或簡寫
EventHandler handler = MyMethod;

調用機制:委派 = 方法代理


void MyMethod(object s, EventArgs e) { Console.WriteLine("Called!"); }

handler(sender, e); // 相當於 MyMethod(sender, e)

這個過程稱為「委派」:MyMethod 將執行權委託給 handler。

多播委派:一個委派串聯多個方法


handler += MethodA;
handler += MethodB;
handler(); // 依序執行 MethodA → MethodB
handler -= MethodA; // 移除
  • 回傳值以最後一個方法為準。
  • 若任一方法拋出例外,後續方法不再執行。

內建泛型委派:Action / Func / Predicate

委派參數回傳用途
Action0~16void無回傳邏輯
Func<TResult>0~16TResult有回傳邏輯
Predicate<T>1 (T)bool條件判斷

Action log = Console.WriteLine;
Func add = (a,b) => a+b;
Predicate isEven = x => x%2==0;

匿名方法與 Lambda 表達式


// 匿名方法 (C# 2.0)
handler = delegate(object s, EventArgs e) { Console.WriteLine("Anon"); };

// Lambda (C# 3.0+)
handler = (s, e) => Console.WriteLine("Lambda");

實戰場景

  1. 事件機制:button.Click += (s,e) => ... 本質是委派訂閱。
  2. 回呼/策略模式:演算法核心邏輯固定,具體比較/處理規則以委派注入。
  3. 非同步程式設計:BeginInvoke/EndInvoke、Task.Run(Action) 皆基於委派。

總結

委派是 C# 函數式程式設計的基石:型別安全、支援多播、可序列化(跨 AppDomain)。掌握「定義簽章 → 實例化綁定方法 → 像呼叫方法一樣呼叫委派」三步驟,即可靈活運用於事件、回呼、LINQ、非同步等所有場合。

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