新闻中心

C#的Action和Func委托是什么?如何使用它们传递方法?

2025-11-22
浏览次数:
返回列表
Action用于无返回值方法传递,Func用于有返回值方法传递;二者均支持0-16个参数,可结合Lambda表达式使用,广泛应用于回调、LINQ查询等场景,提升代码可读性与扩展性。

c#的action和func委托是什么?如何使用它们传递方法?

在C#中,ActionFunc 是系统内置的泛型委托类型,用于简化方法的传递和调用。它们常用于将方法作为参数传给其他方法,实现回调、事件处理、LINQ 查询等场景。

什么是 Action?

Action 是一个表示无返回值方法的委托。它可以接受 0 到 16 个输入参数。

常见形式:

  • Action:无参数,无返回值
  • Action:一个参数,无返回值
  • Action:两个参数,无返回值

示例:

CA.LA CA.LA

第一款时尚产品在线设计平台,服装设计系统

CA.LA 94 查看详情 CA.LA
void SayHello()
{
    Console.WriteLine("Hello");
}
<p>void Greet(string name)
{
Console.WriteLine($"Hello, {name}");
}</p><p>// 使用 Action 调用无参方法
Action action1 = SayHello;
action1(); // 输出: Hello</p><p>// 使用 Action<string> 调用带参方法
Action<string> action2 = Greet;
action2("Alice"); // 输出: Hello, Alice

什么是 Func?

Func 是一个有返回值的泛型委托。它至少有一个参数是返回类型(最后一个),最多支持 16 个输入参数加一个返回值。

常见形式:

  • Func:无输入参数,返回 TResult
  • Func:一个输入参数,返回 TResult
  • Func:两个输入参数,返回 TResult

示例:

int GetNumber()
{
    return 42;
}
<p>string GetName(int id)
{
return id == 1 ? "Tom" : "Unknown";
}</p><p>// 使用 Func<int> 接收无参但有返回值的方法
Func<int> func1 = GetNumber;
int number = func1(); // number = 42</p><p>// 使用 Func<int, string> 接收带参并返回字符串的方法
Func<int, string> func2 = GetName;
string name = func2(1); // name = "Tom"

如何使用它们传递方法?

你可以把普通方法、匿名方法、Lambda 表达式赋值给 Action 或 Func。

实际应用场景示例:定义一个通用执行器方法

void ExecuteAction(Action action)
{
    Console.WriteLine("开始执行...");
    action();
    Console.WriteLine("执行结束。");
}
<p>int ExecuteFunc(Func<int> func)
{
Console.WriteLine("开始计算...");
int result = func();
Console.WriteLine("计算完成。");
return result;
}

调用示例:

ExecuteAction(SayHello);
// 输出:
// 开始执行...
// Hello
// 执行结束。
<p>int result = ExecuteFunc(GetNumber);
// 输出:
// 开始计算...
// 计算完成。

Lambda 表达式写法更简洁:

ExecuteAction(() => Console.WriteLine("内联消息"));
<p>int square = ExecuteFunc(() => 5 * 5); // 返回 25

小结

Action 用于没有返回值的方法传递,Func 用于有返回值的方法传递。两者都支持多种参数数量,结合 Lambda 使用非常灵活。它们让代码更具可扩展性和可读性,尤其是在需要“把方法当参数”的场合,比如集合操作、异步编程、依赖注入等。

基本上就这些,掌握它们能让你写出更简洁、函数式风格的 C# 代码。

以上就是C#的Action和Func委托是什么?如何使用它们传递方法?的详细内容,更多请关注其它相关文章!


# c#  # 委托  # 最多  # 邮件营销推广单页网站  # 网站推广火热视频  # 贵州视频网站优化技巧  # b2c网站怎样推广  # 宁夏外贸网站建设  # 相关文章  # 你可以  # 是在  # 更有  # 实际应用  # 是一个  # 回调  # 如何使用  # 返回值  # 代码可读性  # 营销宝自主推广怎么取消  # 江门优化网站推广  # seo究竟怎么做  # 唐山网站怎么做推广赚钱  # 酒类推广营销策略有哪些 


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


相关推荐: C++如何实现异步操作_C++11使用std::future和std::async进行异步编程  Win10自动更新怎么关闭 Win10永久关闭系统更新的两种方法【终极版】  Lar*el Form Request中唯一性验证在更新操作中的正确实现  PDF文件体积过大处理_PDF压缩技巧详解  动漫岛观看全网网 动漫岛在线正版动漫入口  照顾宝贝2小游戏免费秒玩入口  C++编译期如何执行复杂计算_C++模板元编程(TMP)技巧与应用  《铁拳8》黑皮辣妹新实机:元气满满的18岁少女!  MAC怎么安装Homebrew包管理器_MAC为开发者和高级用户安装命令行工具  QQ邮箱电脑版登录入口_QQ邮箱官方网站登录平台  一加Ace 6T支持全新明眸护眼:通过了最严苛的护眼小金标认证  单12V-2&#215;6实现为RTX 5090供电750W!甚至都没敢跑分  微信怎么把收藏的内容分类管理 微信收藏内容标签分类方法  Python字典中优雅地迭代剩余元素的方法  MAC怎么在地图App里使用“四处看看”_MAC体验部分城市的3D实景街景  如何创建独立于主系统的J*a运行环境_隔离式环境搭建策略  如何优雅地解决Livewire文件上传难题?SpatieLivewireFilepond让一切变得简单  谷歌推RCS信息存档功能:公司可监控员工私密信息!  微信网页版官方入口教程 微信网页版网页版快速登录步骤  Go语言JSON解析深度指南:动态访问与结构体映射实践  如何在J*a中使用Locale处理多语言环境  win11开机启动修复循环怎么办 Win11无法进入系统高级启动解决方法【修复】  晋江读书网页版在线登录 晋江读书电脑版官网  漫蛙2正版漫画站 漫蛙2网页版快速访问入口  Sublime Text怎么显示空格和制表符_Sublime显示不可见字符设置  Lar*el 8 多关键词数据库搜索优化实践  J*aScript:在map操作中高效处理空数组  2306选座时如何选靠窗位置_12306选座靠窗座位查看方法解析  特斯拉自动驾驶房车计划曝光 原型车将于2027年亮相  UC浏览器官网入口2025最新 UC浏览器网页版正式地址  天眼查企业查询官网入口 天眼查官方网页版查询  俄罗斯Yandex免登录入口_Yandex搜索引擎官网一键直达  如何优雅地扩展SprykerGlue后端API授权逻辑,使用spryker/glue-backend-api-application-authorization-connector-extension  React Hooks最佳实践:动态组件状态管理的组件化方案  Lar*el表单中优雅地处理“返回”按钮以规避验证:最佳实践指南  b站怎么取消点赞_b站点赞取消操作方法  NetBeans Ant项目:自动化将资源文件复制到dist目录的教程  126邮箱账号注册 电脑版登录入口  win11如何加载ICC颜色配置文件 Win11校色文件安装与显示器色彩管理【指南】  css滚动动画效果怎么实现_使用Animate.css滚动触发动画类  word中如何让数字纵向排列_Word数字纵向排列方法  C++如何打印当前代码行号与文件名_C++预定义宏FILE与LINE的使用  千牛数据看板网页版_千牛数据看板网页版访问方法  斑马英语APP如何开启夜间护眼阅读_斑马英语APP夜间模式与低蓝光设置教程  使用Pandas转换并合并DataFrame:多列映射至统一结构  JUnit5/Mockito:优雅测试内部依赖与异常处理的实践  Composer中的^和~符号代表什么_精通Composer版本号语义化约束  PPT平滑切换怎么做 PPT炫酷“平滑”切换动画制作教程【必学】  PS5 Pro有点优势但不多! 《燕云十六声》PS5平台与PC性能画面对比  解决 Express.js 中 PUT 请求密码修改失败的路由配置指南 

搜索