以前我都是通过定义一个delegate来写委托的,但是最近看一些外国人写的源码都是用action和func方式来写,当时感觉对这很陌生所以看起源码也觉得陌生,所以我就花费时间来学习下这两种方式,然后发现确实代码简洁了不少。这两种方式我们也可以去实践的过程去慢慢运用。

先说一下委托:

模拟一下场景:小明最近学习情绪高涨,以前买的书已经满足不了欲望,打算去买本(一个程序员的自我修养)。可是呢以前总是跑书厂买,nm,太远了扛不住,就去跑去附近书店去买,小明去给钱就弄了一本书回来,这个过程就是委托。开始分析

1:小明要买一本一个程序员自我修养的书籍(xx书就不买)硬性要求 (这就是要定义委托性质)

代码:

private delegate void BuyBook();

2:附近书店 (委托的方法)

代码:

public static void Book()
{
Console.WriteLine("我是提供书籍的");
}

3:小明和书店建立关系(给委托绑定方法)

代码:

BuyBook buybook = new BuyBook(Book);

4:小明给钱拿书(触发)

buybook();

上面的内容是为了能理解委托的用法下面呢我开始讲解Action和Func

Action的用法

1:小明很是苦恼,我就是买一本书籍,每次都让我定义下,烦死了,有没有一种方法不去定义委托呢,那么有吗,还真有,就是我们今天讲的Action

Action BookAction = new Action(Book);BookAction();

这样是不是就简单了很多

2:小明现在又不满意了,我把一个程序员的自我修养看完了,现在呢想买本其他书,那怎么办,我是不是要重新再次定义委托。其实不需要你只需要把参数穿过来就可以了。下面我们看Action<T>的用法

  static void Main(string[] args){Action<string> BookAction = new Action<string>(Book);BookAction("百年孤独");}public static void Book(string BookName){Console.WriteLine("我是买书的是:{0}",BookName);}

3:现在小明又改变主意了,我不仅要自己选择书籍,我还要在一个牛逼的书籍厂家买,有没有这种方式呢,那么告诉你有,Action<in T1,in T2>

static void Main(string[] args){Action<string,string> BookAction = new Action<string,string>(Book);BookAction("百年孤独","北京大书店");}public static void Book(string BookName,string ChangJia){Console.WriteLine("我是买书的是:{0}来自{1}",BookName,ChangJia);}

Func的用法

小明又发生疑问了,每次我自己都去书店去拿书,有没有一种方法直接送到我家里呢,那么Func专门提供了这样的服务

Func 解释 封装一个不定具有参数(也许没有)但却返回 TResult 参数指定的类型值的方法。

1:我们先看一个没有参数只有返回值的方法

static void Main(string[] args){Func<string> RetBook = new Func<string>(FuncBook);Console.WriteLine(RetBook);}public static string FuncBook(){return "送书来了";}

2:有参数有返回值的方法

static void Main(string[] args)
{
Func<string,string> RetBook = new Func<string,string>(FuncBook);
Console.WriteLine(RetBook("aaa"));
}
public static string FuncBook(string BookName)
{
return BookName;
}

3:Func一个很重要的用处就是传递值,下面我举一个简单的代码来说明

  Func<string> funcValue = delegate{return "我是即将传递的值3";};DisPlayValue(funcValue);

注释1:DisplayVaue是处理传来的值,比喻缓存的处理,或者统一添加数据库等

 private static void DisPlayValue(Func<string> func){string RetFunc = func();Console.WriteLine("我在测试一下传过来值:{0}",RetFunc);}

总结

1:Action用于没有返回值的方法(参数可以根据自己情况进行传递)

2:Func恰恰相反用于有返回值的方法(同样参数根据自己情况情况)

3:记住无返回就用action,有返回就用Func

转载于:https://www.cnblogs.com/LipeiNet/p/4694225.html

C#之Action和Func的用法相关推荐

  1. C#之Action和Func的用法(转自 https://www.cnblogs.com/LipeiNet/p/4694225.html)

    以前我都是通过定义一个delegate来写委托的,但是最近看一些外国人写的源码都是用action和func方式来写,当时感觉对这很陌生所以看起源码也觉得陌生,所以我就花费时间来学习下这两种方式,然后发 ...

  2. C# Action和Func的用法详解

    此篇文章一部分为转载,一部分为原创 以前我都是通过定义一个delegate来写委托的,但是最近看一些外国人写的源码都是用action和func方式来写,当时感觉对这很陌生所以看起源码也觉得陌生,所以我 ...

  3. c#Action和Func(简单用法)

    c#Action和Func Action 1.Action说明 Action是.NET Framework内置的泛型委托,可以使用Action委托以参数形式传递方法,而不用显示声明自定义的委托.封装的 ...

  4. C# action,delegate,func的用法和区别

    以前我都是通过定义一个delegate来写委托的,但是最近看一些外国人写的源码都是用action和func方式来写,当时感觉对这很陌生所以看起源码也觉得陌生,所以我就花费时间来学习下这两种方式,然后发 ...

  5. C#基础知识学习之 ✨ 委托的兄弟姐妹们 delegate、Action、Func、Predicate

    委托 delegate.Action.Func.Predicate 简单介绍 delegate.Action.Func.Predicate 几种基础的委托结构 几种委托的实例用法 开始分析 deleg ...

  6. 使用.NET中的Action及Func泛型委托

    原文 http://www.cnblogs.com/skm-blog/archive/2013/05/24/3096294.html 委托,在C#编程中占有极其重要的地位,委托可以将函数封装到委托对象 ...

  7. C#委托(delegate、Action、Func、predicate)和事件

    C#委托(delegate.Action.Func.predicate)和事件 - 园子的蜗牛 - 博客园 C#之委托 - 摸鱼王 - 博客园 C++函数指针与C#委托之间有何联系 - 51CTO.C ...

  8. Action和Func区别

    Action<>和Func<>其实都是委托的[代理]简写形式. 简单的委托写法: 1 //普通的委托 2 public delegate void myDelegate(str ...

  9. C#泛型委托Predicate、Action、Func

    Predicate Predicate泛型委托:表示定义一组条件并确定指定对象是否符合这些条件的方法.此委托由 Array 和 List 类的几种方法使用,用于在集合中搜索元素. 通过查看源码发现 P ...

最新文章

  1. C#对Excel的样式操作
  2. 《转》探讨:3D透视投影变换详解-兼谈视平面和屏幕的宽高比问题
  3. 2015-12-03 AD中用户属性Lastlogon与LastlogonTimeStamp的区别
  4. 用户体验五要素_Kwai竞品分析用户体验五要素
  5. Google高性能RPC框架gRPC 1.0.0发布
  6. 车提示检测轮胎气压_水淹车估价中心_辽宁中车检
  7. leetcode47. 全排列 II(回溯)
  8. enterFrame是什么意思?
  9. NTFS文件系统的简述
  10. 一只小蜜蜂(HDU-2044)
  11. 首页静态生成 错误:客户端发现响应内容类型为“text/html”,但应该是“text/xml”...
  12. 面试官:Redis熟悉吗?谈谈Redis都有哪些性能监控指标
  13. WinHex编写16进制文件通过NetAssist网络调试助手发送文件给服务器
  14. 安卓Tv端App开发与手机端的开发的区别
  15. antd FormItem嵌套FormItem的适用场景
  16. js正则表达式验证字符串只包括大小写字母下划线和-
  17. 自带流量的免费微信编辑器推荐
  18. 【眼镜片】绿膜和蓝膜有什么区别?
  19. python读xml文件生成.h头文件_Python创建xml文件示例
  20. 常见安全算法(RSA、AES、MD5等)原理及实现和win10下OpenSSL库的使用

热门文章

  1. 阿里云EMR异步构建云HBase二级索引
  2. 用 JS 做一个数独游戏(二)
  3. 个人网站架构设计(一)
  4. 基于角色的权限设计(二)
  5. 表达不同与构建不同: 对计算机的唯一真正的要求 (TrustNo.1 ) -- 待修改!!!...
  6. Docker 运行gitlab官方文档
  7. 在 2016 年做 PHP 开发是一种什么样的体验?
  8. 淘宝天猫网站停止支持IE6、IE7浏览器,你还在用xp吗?
  9. 中国大唐集团公司的发展战略
  10. 数据库连接池和Tomcat连接池的配置问题