委托、Lambda表达式、事件系列07,使用EventHandler委托

谈到事件注册,EventHandler是最常用的。

19
EventHandler是一个委托,接收2个形参。sender是指事件的发起者,e代表事件参数。

 

□ 使用EventHandler实现猜拳游戏

 

使用EventHandler实现一个猜拳游戏,每次出拳,出剪刀、石头、布这三者的其中一种。

 

首先抽象出一个被观察者,其中提供了事件,提供了执行事件的方法。

    public class FistGame
    {
        public string FistName { get; set; }
        public event EventHandler GuessFist;
        public void Start()
        {
            if (GuessFist != null)
            {
                GuessFist(this, EventArgs.Empty);
            }
        }
    }
 


以上,在Start方法内部调用事件GuessFist的时候,实参this代表FistGame类本身。  

 

客户端必须有一个方法和EventHandler的定义保持一致,这样才可以注册到FistGame类的EventHandler事件上。

   class Program
    {
        static void Main(string[] args)
        {
            FistGame jiandao = new FistGame(){FistName = "剪刀"};
            jiandao.GuessFist += GetFistResult;
            FistGame shitou = new FistGame() { FistName = "石头" };
            shitou.GuessFist += GetFistResult;
            FistGame bu = new FistGame() { FistName = "" };
            bu.GuessFist += GetFistResult;
            FistGame finalFist = null;
            var temp = new Random().Next()%3;
            if (temp == 0)
            {
                finalFist = jiandao;
            }
            else if(temp == 1)
            {
                finalFist = shitou;
            }
            else
            {
                finalFist = bu;
            }
            finalFist.Start();
        }
        static void GetFistResult(object sender, EventArgs e)
        {
            FistGame fistGame = sender as FistGame;
            Console.WriteLine("本次出的拳为:" + fistGame.FistName);
        }
    }
 

20  
以上,GetFistResult方法的参数列表符合EventHandler的定义,并且给每个FistGame实例的GuessFist事件注册了该方法。最后,根据随机数来决定采用哪个FistGame实例。  

 

□ 使用EventHandler传递事件参数

 

首先需要一个派生于EventArgs的类,通过构造函数注入一个枚举状态。

    public class FistGameEventArgs : EventArgs
    {
        public FistEnum CurrentFist { get; private set; }
        public FistGameEventArgs(FistEnum currentFist)
        {
            CurrentFist = currentFist;
        }
    }
    public enum FistEnum
    {
        jiandao,
        shitou,
        bu
    }
 

 

作为被观察者的FistGame来讲,现在需要EventHandler<TEventArgs>泛型来实现。

    public class FistGame
    {
        public string FistName { get; set; }
        public event EventHandler<FistGameEventArgs> GuessFist;
        public void Start()
        {
            if (GuessFist != null)
            {
                GuessFist(this, new FistGameEventArgs(FistEnum.jiandao));
            }
        }
    }
 

 

客户端,与EventHandler参数列表一致的GetFistResult方法把事件参数显示出来。   

        static void Main(string[] args)
        {
            FistGame jiandao = new FistGame(){FistName = "剪刀"};
            jiandao.GuessFist += GetFistResult;
            jiandao.Start();
        }
        static void GetFistResult(object sender, FistGameEventArgs e)
        {
            FistGame fistGame = sender as FistGame;
            Console.WriteLine("从Name属性获得,本次出的拳为:" + fistGame.FistName);
            switch (e.CurrentFist)
            {
                case FistEnum.jiandao:
                    Console.WriteLine("从事件参数获得,本次出的拳为:剪刀");
                    break;
                case FistEnum.shitou:
                    Console.WriteLine("从事件参数获得,本次出的拳为:石头");
                    break;
                case FistEnum.bu:
                    Console.WriteLine("从事件参数获得,本次出的拳为:布");
                    break;
            }
        }
    }    
 

21

 

总结:使用EventHandler委托不仅可以实现事件注册和取消,而且还可以获取事件发起者和事件参数。

 

 

“委托、Lambda表达式、事件系列”包括:

委托、Lambda表达式、事件系列01,委托是什么,委托的基本用法,委托的Method和Target属性

委托、Lambda表达式、事件系列02,什么时候该用委托

委托、Lambda表达式、事件系列03,从委托到Lamda表达式

委托、Lambda表达式、事件系列04,委托链是怎样形成的, 多播委托, 调用委托链方法,委托链异常处理

委托、Lambda表达式、事件系列05,Action委托与闭包

委托、Lambda表达式、事件系列06,使用Action实现观察者模式,体验委托和事件的区别

委托、Lambda表达式、事件系列07,使用EventHandler委托

转载于:https://www.cnblogs.com/darrenji/p/4004343.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/482498.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2022年国家自然科学基金指南发布情况

来源&#xff1a;锐动源编辑部近日&#xff0c;2022年国家自然科学基金部分项目申报指南已陆续发布。据不完全统计&#xff0c;截至目前2022年国家自然科学基金已发布32个项目的申报指南&#xff0c;其中“国家自然科学基金委员会与日本学术振兴会合作与交流项目”已发布获资助…

最简单概率论的五个智慧

来源 &#xff1a;罗辑思维在我认为人人都应该学一些概率知识&#xff0c;它现在是公民的必备知识。现在的世界比过去复杂得多&#xff0c;其中有大量不确定性&#xff0c;是否理解概率&#xff0c;直接决定一个人的开化程度。01随机&#xff1a;有些事情是无缘无故地发生的这个…

谷歌AI一次注释了10%的已知蛋白质序列,超过人类十年研究成果

来源&#xff1a;ScienceAI编辑 &#xff1a;泽南、张倩和 AlphaFold 不同&#xff0c;这次谷歌探索的是用深度学习给蛋白质打上功能标签。蛋白质是组成人体一切细胞、组织的重要成分。机体所有重要的组成部分都需要有蛋白质的参与。目前已知存在的蛋白质种类有数十亿&#xff…

你真的了解计算生物学和AI for Science吗?

来源&#xff1a;量子位Q1&#xff1a;AlphaFold2的最大意义是什么&#xff1f;A1&#xff1a;这个看似突破性的进展&#xff0c;其实是技术演进的必然结果。 此外&#xff0c;如果我们换个视角来看待这个问题&#xff0c;蛋白质结构预测仅仅是计算生物学这个大门类里面一个相对…

Stephen Wolfram专访Judea Pearl:从贝叶斯网络到元胞自动机

来源&#xff1a; 集智俱乐部编译&#xff1a;闫和东、徐培 编辑&#xff1a;邓一雪 导语2022年人工智能与数学国际研讨会&#xff08;ISAIM 2022&#xff09;恰逢著名计算机科学家、贝叶斯网络之父 Judea Pearl 85岁生日&#xff0c;会议期间Mathematica创始人 Stephen Wolfra…

day32 并发编程之锁

并发编程之锁 1. GIL全局解释器锁 2. GIL与普通的互斥锁 3. 死锁 4. 信号量 5. event事件 6. 线程q 1. GIL全局解释器锁 """ In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native threads from executing Python bytec…

马斯克Neuralink被曝“虐杀实验猴”,140万元美金项目遭谴责

来源&#xff1a; 学术头条作者&#xff1a;刘芳编辑&#xff1a;黄珊2021 年 4 月&#xff0c;马斯克公布了一段猴子用意念玩乒乓球游戏的视频&#xff0c;一时间为他旗下的脑机接口公司 Neuralink 赚足了眼球。然而最近&#xff0c;这些被用来做脑机接口实验的猴子的经历&…

死前真的会有「跑马灯」,人类首次同步测量大脑濒死状态

来源&#xff1a;新智元编辑&#xff1a;袁榭 好困或许&#xff0c;人死前可能真会眼前出现人生跑马灯&#xff01;最近&#xff0c;神经科学家在记录了一个濒临死亡的人类大脑的活动之后发现&#xff0c;人在死亡前后有节奏的脑电波模式与做梦、回忆记忆和冥想时出现的模式相似…

七牛图片盲水印

注意 暂时不支持从 dora 数据处理直接调该接口&#xff0c;只支持从 kodo 存储调用。即 cdn 域名不可开通图片瘦身调用形式 资源 http://i.iamlj.com/19-08-12/123936.png 处理参数 watermark/6/method/encode/text/aGVsbG8gcWluaXU 新图 http://i.iamlj.com/19-08-12/123936-w…

「最小细胞」的3D数字模型,计算揭示生命最基本的要求

来源&#xff1a;ScienceAI编辑&#xff1a;萝卜皮无论是海洋深处的奇异生物还是我们体内的细菌&#xff0c;地球上的所有生命都是由细胞组成的。但我们对这些细胞中最简单的细胞如何运作只有一个非常粗略的了解。伊利诺伊大学厄巴纳-香槟分校的一个团队创建了有史以来最完整的…

Yann LeCun最新发声:自监督+世界模型,让 AI 像人类与一样学习与推理

来源&#xff1a;AI科技评论作者&#xff1a;维克多、西西、王晔编辑&#xff1a;陈彩娴如何突破当代人工智能&#xff08;AI&#xff09;的瓶颈&#xff1f;不同学者存在不同观点。总体来看可以概括为两类&#xff0c;其一监督学习者&#xff0c;提倡通过改善数据标签质量&…

两大头号玩家 一个伟大愿景: 联邦学习的元生态建设美好世界

来源&#xff1a;IEEE标准协会新年伊始&#xff0c;世界领先的标准制定机构IEEE标准协会牵头&#xff0c;组织了2022年度联邦学习领域首场重量级尖峰交流活动——联邦学习首创团队带头人、谷歌研究院副总裁Blaise Agura y Arcas博士&#xff0c;与联邦学习亚洲奠基人、IEEE联邦…

物理学的过去、现在与未来

来源&#xff1a;中科院之声&#xff08;ID:zkyzswx&#xff09;、《物理》杂志、中国物理学会期刊网作者&#xff1a;冯端&#xff08;我国著名物理学家、金属和晶体材料学家、教育家&#xff0c;中国科学院院士、第三世界科学院院士、第五届中国物理学会理事长&#xff0c;南…

《MIT科技评论》:2022年全球十大突破性技术

来源&#xff1a;6G俱乐部资料来源&#xff1a;《麻省理工科技评论》近日&#xff0c;《麻省理工科技评论》2022年“全球十大突破性技术”正式发布。此次发布的突破性技术包括&#xff1a;“新冠口服药”“实用型聚变反应堆”“终结密码”“AI蛋白质折叠”“PoS权益证明”“长时…

PNAS前沿:迈向作为多层学习的进化理论

来源&#xff1a;集智俱乐部作者&#xff1a;郭瑞东编辑&#xff1a;邓一雪导语进化、学习与物理系统的重整化有何相似之处&#xff1f;PNAS的论文“构建将进化视作多层学习的理论”一文&#xff0c;经由统一的理论框架&#xff0c;分析进化过程中的环境预测误差&#xff0c;及…

【前瞻】Nature:2022年7大“颠覆性”技术

来 源&#xff1a;中国科学报 作 者&#xff1a;文乐乐 近日&#xff0c;《自然》对“可能在未来一年对科学产生影响”的7项技术进行了综述。这7项技术分别是完整版基因组、蛋白质结构解析、量子模拟、精准基因组调控、靶向基因疗法、空间多组学、基于CRISPR的诊断。完整版基因…

重磅!Nature子刊发布稳定学习观点论文:建立因果推理和机器学习的共识基础...

来源&#xff1a;AI科技评论整理&#xff1a;AI科技评论2月23日&#xff0c;清华大学计算机系崔鹏副教授与斯坦福大学Susan Athey&#xff08;美国科学院院士&#xff0c;因果领域国际权威&#xff09;合作&#xff0c;在全球顶级期刊Nature Machine Intelligence&#xff08;影…

卸载mysql

先停止所有mysql有关进程。 打开控制台:依次输入以下命令 sudo rm /usr/local/mysqlsudo rm -rf /usr/local/mysql*sudo rm -rf /Library/StartupItems/MySQLCOMsudo rm -rf /Library/PreferencePanes/My*vim /etc/hostconfig and removed the line MYSQLCOM-YES-rm -rf ~/Libr…

​数据集拥有自己的世界观?不,其实还是人的世界观

来源&#xff1a; AI科技评论编译&#xff1a;Antonio编辑&#xff1a;陈彩娴伴随深度学习的不断日常化&#xff0c;数据集中的偏见&#xff08;bias&#xff09;和公正性&#xff08;fairness&#xff09;已经成为一个热门研究方向。偏见在AI领域是一个很棘手的话题&#xff1…

图灵奖获得者Yann LeCun:未来几十年AI研究的最大挑战是「预测世界模型」

来源&#xff1a;机器学习研究组订阅LeCun 认为&#xff0c;构造自主 AI 需要预测世界模型&#xff0c;而世界模型必须能够执行多模态预测&#xff0c;对应的解决方案是一种叫做分层 JEPA&#xff08;联合嵌入预测架构&#xff09;的架构。该架构可以通过堆叠的方式进行更抽象、…