尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

C# 委託(Delegate)與事件(Event)筆記

C# 委託(Delegate)與事件(Event)筆記
📅 发布时间:2026/6/19 16:06:47

C# 委託(Delegate)與事件(Event)筆記

📝 C# 委託(Delegate)與事件(Event)筆記

1️⃣ 委託(Delegate)

定義

委託是一種方法指標(方法的變數),可以存放、傳遞方法。

// 定義委託
delegate void MyDelegate(string message);// 方法符合委託簽名
void SayHello(string msg) => Console.WriteLine("Hello " + msg);// 使用委託
MyDelegate d = SayHello;
d("World"); // Hello World

特性

  • 可以指向一個或多個方法
  • 方法簽名必須與委託一致
  • 支持 多播(Multicast)

2️⃣ 多播委託(Multicast Delegate)

概念

一個委託可以同時指向多個方法,呼叫時依序執行。

void Hello() => Console.WriteLine("Hello");
void World() => Console.WriteLine("World");MyDelegate d = Hello;
d += World; // 加入另一個方法d(); 
// 輸出:
// Hello
// World

注意事項

  1. 使用 += 加入方法,-= 移除方法
  2. 有回傳值的多播委託,只保留最後一個方法的回傳值
delegate int MyDelegate();int A() { Console.WriteLine("A"); return 1; }
int B() { Console.WriteLine("B"); return 2; }MyDelegate d = A;
d += B;int result = d(); // 呼叫 A 和 B
Console.WriteLine(result); // 2

3️⃣ 事件(Event)

定義

事件是封裝好的多播委託,提供安全的通知機制。
外部只能訂閱(+=)或退訂(-=),不能直接觸發事件。

public class Button
{public event Action? OnClick; // 定義事件public void Click() // 事件觸發方法(只能在類內呼叫){OnClick?.Invoke();}
}

使用方式

var button = new Button();// 訂閱事件
button.OnClick += () => Console.WriteLine("Listener 1");
button.OnClick += () => Console.WriteLine("Listener 2");// 觸發事件
button.Click();
// 輸出:
// Listener 1
// Listener 2

4️⃣ 委託 vs 事件對比

比較項 委託(Delegate) 事件(Event)
本質 方法指標 封裝的多播委託
外部可否訂閱 ✅ ✅
外部可否觸發 ✅ ❌(只能類內觸發)
常用場景 傳遞方法、回呼函式 UI事件、資料變更通知
多播 支援 支援

5️⃣ 常用技巧

  • 安全觸發事件
OnClick?.Invoke(); // ?避免 null reference
  • 查看多播委託清單
foreach (var m in d.GetInvocationList())
{Console.WriteLine(m.Method.Name);
}
  • 事件參數
public event EventHandler? OnCompleted;void RaiseEvent() => OnCompleted?.Invoke(this, EventArgs.Empty);

6️⃣ 核心理解

  1. 委託 = 方法的變數,可單播或多播
  2. 多播委託 = 可以同時指向多個方法
  3. 事件 = 封裝多播委託,用於通知、保障安全觸發
  4. 事件訂閱者(listener)是「觀察者模式」的典型應用

相关新闻

  • 点特征 - MKT
  • 正弦化作用 - MKT
  • 不同域的阿里邮箱 跨域搬家方法

最新新闻

  • DC/DC电源设计实战:从MIC261201选型到PCB布局与热管理全解析
  • 2026济南婚纱摄影选型全指南:行业标准、品牌梯队与合规避坑全解析 - 速递信息
  • 杭州想带毛孩子回家?梦宠山庄等4家门店值得逛逛 - 园友3800037
  • 西安资质代办去哪里靠谱?2026本土合规企业服务机构榜单 - 速递信息
  • 端午充电季|乘风破浪,技能进阶正当时
  • 武汉想养猫狗先看看,梦宠山庄探店记录 - 园友3800037

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号