当前位置: 首页 > 科技观察

关于C#Action、Delegate、Func用法的文章

时间:2023-03-20 17:32:33 科技观察

本文转载自微信公众号《dotNET编程百科全书》,作者zls365。转载本文请联系dotNET编程百科公众号。以前都是通过定义delegate来写delegate,但是最近看到一些老外写的源码是用action和func的形式写的。花时间学习这两种方法,然后发现代码确实简单了很多。我们也可以在练习的过程中慢慢使用这两种方法。先说委托:模拟场景:小明最近学习情绪高涨,之前买的书满足不了他的欲望,于是打算买本书(程序员的自我修养)。不过以前都是去书厂买的,nm,背不了太远,就去附近的书店买,小明去给钱拿回一本书,这委托过程。开始分析1:小明想买一本程序员自我修养的书(xx书不会买)强制要求(这个是定义委托性质)代码:privatedelegatevoidBuyBook();2:附近书店(委托方法)代码:publicstaticvoidBook(){Console.WriteLine("我提供书籍");}3:小明与书店建立关系(委托绑定方法)代码:BuyBookbuybook=newBuyBook(Book);4:小明买书要钱(trigger)buybook();以上内容是为了了解委托的用法。接下来开始讲解Action和FuncAction的用法1:小明很苦恼。我就买一本书,每次都让我定义。它很烦人。有没有办法不定义委托?有办法吗?真的有吗?我们今天讲的ActionActionBookAction=newAction(Book);BookAction()是不是就简单多了?2:小明现在不满意,我看完了程序员的修养,现在想再买一本书,怎么办?我要重新定义委托吗?实际上,您不需要只传递参数。下面看一下Action的用法"IambuyingabookTheoneis:{0}",BookName);}3:现在小明又变心了。我不仅要自己选书,还要从一家很棒的图书制造商那里购买。有这样的方法吗?告诉你是的,ActionstaticvoidMain(string[]args){ActionBookAction=newAction(Book);BookAction(《百年孤独》,"北京书店");}publicstaticvoidBook(stringBookName,stringChangJia){Console.WriteLine("我买的书是:{0}来自{1}",BookName,ChangJia);}小明对Func的用法有疑问。每次去书店取书,有什么办法吗?方法是直接发到我家的,所以Func特地提供了这样的服务。Func解释并封装了一个方法,该方法不一定有参数(也可能没有),但返回一个TResult参数指定类型的值。1:先看一个没有参数,只有返回值的方法{return"SendHerecomesthebook";}2:方法参数和返回值staticvoidMain(string[]args){FuncRetBook=newFunc(FuncBook);Console.WriteLine(RetBook("aaa"));}publicstaticstringFuncBook(stringBookName){returnBookName;}3:Func最重要的用途之一是传递值。我举一个简单的代码来说明一下FuncfuncValue=delegate{return"我是要传递的值3";};DisPlayValue(funcValue);注1:DisplayVauue是对传入的值进行处理,比喻为缓存处理,或者说统一加一个数据库。privatestaticvoidDisPlayValue(Funcfunc){stringRetFunc=func();Console.WriteLine("我正在测试传递的值:{0}",RetFunc);}总结1:Action用于没有返回值的方法(参数可以根据自己的情况传)2:func正好相反有返回值的方法(同一个参数看自己的情况)3:没有return记得用action,用func如果有回报