自动填表_网页自动填表_填表软件_万能填表官网

    搜索
    热搜: 活动 交友 discuz
    查看: 16|回复: 0

    C#之Action和Func的用法

    [复制链接]

    242

    主题

    300

    帖子

    1177

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    1177
    发表于 2018-1-6 12:56:52 | 显示全部楼层 |阅读模式
    复制代码
    1.   以前我都是通过定义一个delegate来写委托的,但是最近看一些外国人写的源码都是用action和func方式来写,当时感觉对这很陌生所以看起源码也觉得陌生,所以我就花费时间来学习下这两种方式,然后发现确实代码简洁了不少。这两种方式我们也可以去实践的过程去慢慢运用。

    2. 先说一下委托:

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

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

    5. 代码:

    6. private delegate void BuyBook();

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

    8. 代码:

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

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

    14. 代码:

    15.   BuyBook buybook = new BuyBook(Book);

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

    17. buybook();

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

    19. Action的用法

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

    21. Action BookAction = new Action(Book);
    22.             BookAction();
    23. 这样是不是就简单了很多

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

    25. 复制代码
    26.   static void Main(string[] args)
    27.         {
    28.             Action<string> BookAction = new Action<string>(Book);
    29.             BookAction("百年孤独");
    30.         }
    31.         public static void Book(string BookName)
    32.         {
    33.             Console.WriteLine("我是买书的是:{0}",BookName);
    34.         }
    35. 复制代码
    36. 3:现在小明又改变主意了,我不仅要自己选择书籍,我还要在一个牛逼的书籍厂家买,有没有这种方式呢,那么告诉你有,Action<in T1,in T2>



    37. 复制代码
    38. static void Main(string[] args)
    39.         {
    40.             Action<string,string> BookAction = new Action<string,string>(Book);
    41.             BookAction("百年孤独","北京大书店");
    42.         }
    43.         public static void Book(string BookName,string ChangJia)
    44.         {
    45.             Console.WriteLine("我是买书的是:{0}来自{1}",BookName,ChangJia);
    46.         }
    47. 复制代码
    48. Func的用法

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

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

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

    52. 复制代码
    53. static void Main(string[] args)
    54.         {
    55.             Func<string> RetBook = new Func<string>(FuncBook);
    56.             Console.WriteLine(RetBook);
    57.         }
    58.         public static string FuncBook()
    59.         {
    60.             return "送书来了";
    61.         }
    62. 复制代码
    63. 2:有参数有返回值的方法

    64. 复制代码
    65. static void Main(string[] args)
    66. {
    67. Func<string,string> RetBook = new Func<string,string>(FuncBook);
    68. Console.WriteLine(RetBook("aaa"));
    69. }
    70. public static string FuncBook(string BookName)
    71. {
    72. return BookName;
    73. }
    74. 复制代码
    75. 3:Func一个很重要的用处就是传递值,下面我举一个简单的代码来说明

    76.   Func<string> funcValue = delegate
    77.             {
    78.                 return "我是即将传递的值3";
    79.             };
    80.             DisPlayValue(funcValue);
    81. 注释1:DisplayVaue是处理传来的值,比喻缓存的处理,或者统一添加数据库等

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

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

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

    90. 3:记住无返回就用action,有返回就用Func
    复制代码

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|Comsenz Inc.万能填表软件官网  2010-2016 qq:353502250

    GMT+8, 2018-1-19 17:03 , Processed in 0.187498 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表