新闻中心

C# 委托(delegate)的用法 - 实现回调函数与事件处理的核心

2025-12-05
浏览次数:
返回列表
委托是C#中类型安全的函数指针,用于封装方法引用以实现回调、事件处理及多播调用;支持自定义声明(如delegate void MessageHandler(string))和内置泛型委托(如Action、Func、Predicate)。

c# 委托(delegate)的用法 - 实现回调函数与事件处理的核心

在 C# 中,委托(delegate)是一种类型安全的函数指针,它允许将方法作为参数传递、在运行时动态调用,是实现回调机制和事件处理的基础。通过委托,可以编写更灵活、可扩展的代码,尤其在 GUI 编程、异步操作和事件驱动架构中广泛使用。

什么是委托

委托是一个类,用于封装对具有特定参数列表和返回类型的方法的引用。声明委托后,可以将方法赋值给该委托实例,并通过委托来调用这个方法。

定义委托使用 delegate 关键字,例如:

public delegate void MessageHandler(string message);
public delegate int Calculate(int a, int b);

上述代码定义了两个委托:MessageHandler 指向无返回值、接受一个字符串参数的方法;Calculate 指向返回 int、接受两个 int 参数的方法。

使用委托实现回调函数

回调函数是指在一个方法执行完成后,调用另一个预先指定的方法。委托非常适合实现这种机制。

例如,有一个数据处理方法,在处理完成后需要通知调用方:

public class DataProcessor
{
    public void ProcessData(string data, MessageHandler callback)
    {
        // 模拟处理
        Console.WriteLine("正在处理数据...");
        if (callback != null)
            callback("处理完成!");
    }
}

// 使用示例
static void ShowMessage(string msg)
{
    Console.WriteLine(msg);
}

var processor = new DataProcessor();
processor.ProcessData("test", ShowMessage);

这里 ShowMessage 方法被当作回调传入,处理完成后由委托触发,实现了调用方与处理逻辑的解耦。

委托在事件处理中的应用

C# 的事件(event)本质上是基于委托的封装,用于实现发布-订阅模式。常见的 UI 事件如按钮点击、窗口关闭等都依赖于委托。

Mistral AI Mistral AI

Mistral AI被称为“欧洲版的OpenAI”,也是目前欧洲最强的 LLM 大模型平台

Mistral AI 182 查看详情 Mistral AI

定义事件通常使用 EventHandler 或自定义委托:

public class Button
{
    // 声明事件
    public event EventHandler Click;

    // 触发事件
    public void OnClick()
    {
        Click?.Invoke(this, EventArgs.Empty);
    }
}

// 使用
var button = new Button();
button.Click += (sender, e) => Console.WriteLine("按钮被点击了!");
button.OnClick();

通过 += 可以注册多个事件处理器,当事件触发时,所有订阅的方法都会被调用。这正是委托多播(MulticastDelegate)能力的体现。

内置委托类型简化开发

C# 提供了一些通用委托类型,减少手动声明委托的需要:

  • Action:表示无返回值的方法,支持 0 到 16 个参数,如 Action、Action、Action
  • Func:表示有返回值的方法,最后一个泛型参数为返回类型,如 Func、Func
  • Predicate:表示返回 bool 的方法,常用于条件判断,如 Predicate

例如:

List names = new List { "Alice", "Bob", "Charlie" };
names.FindAll(name => name.Length > 4).ForEach(Console.WriteLine);

这里的 FindAll 接收的是 Predicate,而 Lambda 表达式自动匹配到该委托类型。

基本上就这些。委托是 C# 实现回调和事件的核心机制,理解其用法有助于掌握事件驱动编程和异步模型。结合 Lambda 表达式和内置泛型委托,可以让代码更简洁、更具表达力。

以上就是C# 委托(delegate)的用法 - 实现回调函数与事件处理的核心的详细内容,更多请关注其它相关文章!


# 是一种  # SEO备案是什么  # 吕梁关键词排名价格  # 1688营销宝推广产品  # 贵港网站推广设计  # 永州抖音seo哪家好  # seo综合信息查询  # 专业网站建设商家  # 网站推广产品优化  # 公司网站推广软文  # 庄河关键词网站推广  # 是指  # 多个  # 回调函数  # 是一个  # 的是  # 完成后  # 自定义  # 欧洲  # 返回值  # 回调  # gate  # red  # c#  # 处理器  # c#委托 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 手机CPU怎么影响游戏体验_手机CPU对游戏性能的影响分析  微信怎么把收藏的内容分类管理 微信收藏内容标签分类方法  如何高效处理PHP中的Excel数据导入导出?PortPHP/Spreadsheet助你轻松搞定!  J*aScript Promise链中如何正确终止后续.then执行并处理错误  修复二维数组索引越界异常:一维循环到二维坐标的正确映射  双系统安装时,如何设置默认启动系统? msconfig命令了解一下!  Yandex免登录网页版地址 Yandex搜索引擎官方访问入口  word邮件合并后日期格式不对怎么改_Word邮件合并日期格式修改方法  电脑屏幕颜色不舒服怎么办_Windows夜间模式与色彩校准教程【护眼技巧】  win11怎么查看应用耗电情况 Win11电池设置查看应用能耗排行榜【优化】  解决Bootstrap卡片顶部边距导致背景图下移的问题  钉钉视频会议声音异常如何处理 钉钉会议音频修复技巧  Composer如何在生产环境安全地执行composer update  KFC套餐升级怎么获取优惠代码_KFC套餐升级活动与优惠代码获取方法  AO3官方镜像站点汇总 AO3同人作品网页版直达链接  抖音怎么赚钱_抖音创作者变现方法与途径指南  《GTA6》开发画面疑似泄露!这次可不是AI了  Composer的 "check-platform-reqs" 命令有什么用_在部署前检查生产环境是否满足Composer依赖需求  UC浏览器网页版登录入口官网 电脑版网址入口  文本文档写html代码怎么运行_文本文档html代码运行步骤【教程】  J*aScript中向JSON对象添加新属性的正确姿势  Python自定义类排序:解决lambda键值访问TypeError的实践指南  腾讯QQ邮箱登录入口_QQ邮箱官方网站使用地址  C++如何检测键盘输入_C++ _kbhit与_getch函数非阻塞输入  poki网页游戏推荐_poki免费游戏平台入口  C++ vector二维数组定义_C++ vector of vector用法  如何提高微信支付的安全性_微信支付安全防护与设置建议  护手霜蹭到袖口上了如何清洗? 怎样避免留下一圈油印?  uc浏览器网页版极速入口 uc网页浏览器网页版流畅体验  解决深度学习模型训练初期异常高损失与完美验证准确率问题  Angular Material 垂直步进器:实现底部到顶部排序的教程  解决移动端滚动问题的overflow属性应用指南  c++如何使用折叠表达式(Fold Expressions)_c++17可变参数模板新技巧  神庙逃亡小游戏在线玩 神庙逃亡小游戏入口  企业名称高精度匹配:N-gram方法在结构相似性分析中的应用  Tabulator表格中精确实现日期时间排序的指南  Word2013如何插入视频和音频媒体_Word2013媒体插入的多媒体支持  AO3访问入口汇总 AO3网页版同人作品一键直达  React Hooks最佳实践:动态组件状态管理的组件化方案  在J*a中如何开发在线活动报名与管理系统_活动报名管理项目实战解析  qq游戏免费畅玩入口_qq游戏电脑版快速启动  哔哩哔哩忘记密码了怎么找回_哔哩哔哩密码找回方法  ArrayList与LinkedList操作复杂度详解:遍历与修改  Yandex官网搜索引擎免登录_俄罗斯Yandex一键直达入口  win11 Snap Layouts怎么用 Win11窗口布局与分屏多任务高效指南【必学】  J*aScript生成器_j*ascript异步迭代  PHP中获取MongoDB服务器运行时间(Uptime)的专业指南  ACG动漫视频网入口 ACG动漫*免费正版观看地址  抖音未来赚钱的新趋势 2025年值得关注的变现风口分析  J*aScript DOM操作:高效清空列表元素的策略与实践 

搜索