51Halcon机器视觉

 找回密码
 会员注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 167|回复: 1
收起左侧

[基础教程] C#action和func的使用

[复制链接]
  • TA的每日心情
    开心
    2019-9-11 19:58
  • 签到天数: 53 天

    连续签到: 1 天

    [LV.5]常住居民I

    16

    主题

    69

    帖子

    623

    积分

    Rank: 3

    积分
    623
    发表于 2019-8-28 11:31:18 | 显示全部楼层 |阅读模式

    部门助理 |主题 16|帖子 69|积分 623

    51Halcon诚邀您的加入,专注于机器视觉开发与应用技术,我们一直都在努力!

    您需要 登录 才可以下载或查看,没有帐号?会员注册

    x
    以前我都是通过定义一个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


    1.发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    2.提问请组织好自己的逻辑,标题注明大概是什么问题,问题内容写详细,需提供问题症状、错误代码、截图、位置等等信息,不要让别人去猜你想问啥;

    3.如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    4.回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

    该用户从未签到

    0

    主题

    10

    帖子

    30

    积分

    Rank: 1

    积分
    30
    发表于 2019-8-29 12:08:27 | 显示全部楼层

    试用员工 |主题 0|帖子 10|积分 30

    不错,学习了

    1.发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    2.提问请组织好自己的逻辑,标题注明大概是什么问题,问题内容写详细,需提供问题症状、错误代码、截图、位置等等信息,不要让别人去猜你想问啥;

    3.如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    4.回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

    您需要登录后才可以回帖 会员登录 | 会员注册

    本版积分规则

    51Halcon会员技术交流会员技术交流 | 51Halcon官方客服咨询官方客服咨询 | Halcon切换助手使用反馈切换助手使用反馈 | 51Halcon论坛管理团队论坛管理团队

    申请友链| 小黑屋| 手机版| Archiver|  

    粤ICP备15095995号-2 粤公网安备44030602000670号

    Powered by 51Halcon机器视觉 X3.4 Licensed© 2015-2019 Comsenz Inc.

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