博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#之Action和Func的用法(转自 https://www.cnblogs.com/LipeiNet/p/4694225.html)
阅读量:6323 次
发布时间:2019-06-22

本文共 2615 字,大约阅读时间需要 8 分钟。

以前我都是通过定义一个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
BookAction = new Action
(Book); BookAction("百年孤独"); } public static void Book(string BookName) { Console.WriteLine("我是买书的是:{0}",BookName); }

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

 

static void Main(string[] args)        {            Action
BookAction = new Action
(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
RetBook = new Func
(FuncBook); Console.WriteLine(RetBook); } public static string FuncBook() { return "送书来了"; }

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

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

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

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

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

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

总结

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

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

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

 

转载于:https://www.cnblogs.com/wsl2011/p/10366043.html

你可能感兴趣的文章
a threadpool by python
查看>>
REST中 @POST & @PUT 区别
查看>>
handler和message传值两例
查看>>
解决表格中英文字符过多出现将边框撑大弄乱布局的问题
查看>>
JQUERY批量操作
查看>>
Git版本管理工具的使用
查看>>
Oracle新增客户端网络配置使用scott出现错误
查看>>
js 对Cookie进行增删改操作
查看>>
IE 的事件对象(event)
查看>>
Mininet VM设置笔记
查看>>
php CGI 简单了解
查看>>
SAE Storage + Android微信内置浏览器图片上传解决方案
查看>>
python学习笔记之线程
查看>>
CentOS6 DNS解析缓慢 SSH登录缓慢 问题解决
查看>>
关于s5pv210主Makefile部分代码的分析和小的修改
查看>>
shell脚本之Apache的配置
查看>>
链路均衡设备的NAT和ipsec ***
查看>>
Saltstack之系统初始化
查看>>
第二篇:数组
查看>>
vSphere容量规划
查看>>