新闻中心

C#中的委托是什么 C# delegate的声明和使用方法

2025-11-10
浏览次数:
返回列表
委托是C#中类型安全的函数指针,用于引用匹配签名的方法,支持方法作为参数传递和多播调用。

c#中的委托是什么 c# delegate的声明和使用方法

C# 中的委托(Delegate)是一种类型安全的函数指针,它可以引用一个或多个具有相同签名的方法。通过委托,你可以将方法作为参数传递、在运行时动态调用方法,或者实现事件处理机制。它是实现回调函数和事件驱动编程的基础。

什么是委托

委托本质上是一个类,它定义了方法的类型,即方法的返回值类型和参数列表。一旦声明了一个委托类型,就可以创建该类型的实例,并将其指向一个或多个匹配签名的方法。调用委托时,它会执行所指向的方法。

声明委托

使用 delegate 关键字来声明委托。语法如下:

public delegate 返回类型 委托名称(参数列表);

例如,声明一个无返回值、接受字符串参数的委托:

public delegate void MessageHandler(string message);

再比如,声明一个返回 int、接受两个 int 参数的委托:

public delegate int MathOperation(int a, int b);

使用委托

声明完委托后,可以创建委托实例并绑定到具体的方法上。方法必须与委托定义的签名一致。

步骤示例:

Yaara Yaara

使用AI生成一流的文案广告,电子邮件,网站,列表,博客,故事和更多…

Yaara 95 查看详情 Yaara
  • 定义匹配签名的方法
  • 创建委托实例并赋值
  • 调用委托

完整代码示例:

using System;

// 声明委托 public delegate void Notify(string msg);

class Program
{ // 匹配委托签名的方法 static void ShowMessage(string msg) { Console.WriteLine("消息: " + msg); }

static void LogMessage(string msg)
{
    Console.WriteLine("日志: " + msg);
}

static void Main()
{
    // 创建委托实例并指向方法
    Notify notify = new Notify(ShowMessage);

    // 调用委托
    notify("Hello World");

    // 可以重新指向另一个方法
    notify = LogMessage;
    notify("系统启动");

    // 使用多播委托(可绑定多个方法)
    Notify multiNotify = ShowMessage;
    multiNotify += LogMessage;
    multiNotify("多播通知");
    // 输出:
    // 消息: 多播通知
    // 日志: 多播通知
}

}

注意:使用 += 可以向委托添加方法,-= 可以移除方法。当调用多播委托时,会依次执行所有绑定的方法。

Action 与 Func 内置委托

C# 提供了通用的内置委托类型,避免频繁自定义委托:

  • Action:用于无返回值的方法,最多支持16个参数。例如:
    Action action = Print;
  • Func:用于有返回值的方法,最后一个泛型参数是返回类型。例如:
    Func func = Add;

示例:

void Print(string s) => Console.WriteLine(s); int Add(int a, int b) => a + b;

Action printer = Print; printer("测试Action");

Func calculator = Add; int result = calculator(3, 5); // result = 8

基本上就这些。委托是 C# 中非常核心的概念,掌握它有助于理解事件、LINQ 和异步编程等高级特性。不复杂但容易忽略细节,关键是方法签名必须匹配。

以上就是C#中的委托是什么 C# delegate的声明和使用方法的详细内容,更多请关注其它相关文章!


# 是一种  # 媒体-推广营销活动  # SEO技术文案励志图片  # 承德营销推广厂家有哪些  # 建设银行免费洗车网站  # 网站建设开题报告  # 地段餐饮营销推广方法  # 乐山抖音seo推广公司  # 南开网站建设推广  # 东城seo推广运营  # 四平网站推广  # 你可以  # 回调函数  # 扁平化  # 是一个  # 与非  # 什么用  # 绑定  # 返回值  # 多个  # 回调  # gate  # c#  # ai 


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


相关推荐: React项目中导航栏Logo自适应布局:避免裁剪与布局溢出  J*a应用集成GitHub CLI与API认证指南  Win10磁盘清理工具在哪 Win10打开并使用磁盘清理【教程】  12306选座如何查看座位示意图_12306座位示意图解读与使用  必由学官方网站入口 必由学学生教师共用登录通道  163邮箱官方主页登录 直达网易邮箱登录核心页面  HTML长属性值处理:表单action路径优化与代码规范应对  今日头条怎么同步内容到抖音_今日头条内容同步到抖音教程  机构:以往存储涨价周期小米利润率实际上有所改善 能转嫁给消费者等  深入理解J*aScript中的B样条曲线与节点向量生成  在Qt QML中通过Python字典动态更新TextEdit内容的教程  谷歌邮箱注册显示错误Gmail服务器异常与延迟处理  MAC如何安全彻底地删除文件_MAC使用终端命令确保文件无法被恢复  c++项目目录结构应该如何组织_c++工程化项目结构规范  深入理解J*a合成构造器:何时以及为何阻止其生成  Steam官网入口直达 Steam注册及登录步骤  win11如何卸载Windows更新补丁 Win11解决更新导致系统不稳定的问题【修复】  J*a TimerTask文件监控:HashMap状态管理与常见陷阱规避指南  妖精漫画网页版登录入口免费_妖精漫画官网主页直接阅读漫画  python3时间如何用calendar输出?  Django表单验证失败时保留用户输入数据的最佳实践  文心一言怎样用批量生成做多版文案_文心一言用批量生成做多版文案【批量创作】  黑猫投诉统一入口官网 消费者权益保护投诉平台  痛风发作了怎么办? 快速止痛和后期饮食调理  ExcelARRAYTOTEXT函数怎么自定义分隔符输出数组文本_ARRAYTOTEXT实现动态生成SQL语句  知音漫客官网漫画下载_知音漫客网页版阅读记录  冬*霸灯泡不亮怎么办_浴霸取暖灯一盏不亮的灯座清洁修复法  如何优雅地扩展SprykerGlue后端API授权逻辑,使用spryker/glue-backend-api-application-authorization-connector-extension  迅雷下载到U盘速度很慢怎么办_迅雷U盘下载慢优化方法  谷歌google账号注册详细步骤 谷歌账号注册官方教程  一加手机电池耗电快怎么办_一加手机电池耗电快的解决方法  QQ邮箱网页版邮箱入口 QQ邮箱官方登录平台  J*aScript数据结构转换:将对象数组按类别分组  没有大陆身份证/银行卡如何实名微信? 亲测有效的几种方法分享  蛙漫画网页版全站入口 蛙漫热门作品免费浏览  狙击外星人小游戏开始_狙击外星人小游戏立即开始  fishbowl官网免费版 fishbowl养鱼网站入口  Golang如何实现Web接口签名验证_Golang Web接口签名校验开发方法  Surface怎么安装系统 微软Surface Pro U盘重装win11教程  Go语言中的*string:深入理解字符串指针  12306怎么选座位选到安静区_12306选座安静区域选择策略  Win10怎么设置静态IP地址 Win10手动配置IP地址步骤【指南】  QQ邮箱网页版快速登录 QQ邮箱邮箱账号官方入口地址  Windows10怎么开启存储感知 Windows10系统设置自动清理临时文件释放C盘空间【教程】  ArrayList与LinkedList操作复杂度详解:遍历与修改  必由学官方平台入口 必由学在线课堂登录地址  葱吃多了会怎样 葱吃多了会伤胃吗  TikTok国际版官网直达_TikTok国际版官网直达进入在线观看  C++ explicit关键字防止隐式转换_C++构造函数安全规范  德邦快递查询平台 德邦快递物流信息查询入口 

搜索