请选择 进入手机版 | 继续访问电脑版

委托和事件的应用场景

[复制链接]
冰宇 发表于 2020-12-31 18:58:40 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
C#委托和事件的应用场景

接触过委托和事件的人都知道,它们的语法都很简朴,真正的难点是在什么场景中使用它们的特性来使用它。下面我希望通过我分析下面的这个案例可以读者有一些启发。有错误的地方还望指出,一起进步,谢谢!
假设你在一天的某个心情好的时刻会玩王者荣耀,你的5个寝室友(A,B,C,D,E…)将在一起打赌,如果你赢了,5个寝室友悄悄各帮你写一门作业,如果你输了你的室友会对你发出讽刺。
有些同学大概会以为这个题目很简朴,不就是if判定吗。
If(心情好,在玩游戏)
{
If(赢)
{
A帮你写英语作业
B帮你写语文作业
C帮你写数文作业
D帮你写化学作业
E帮你写英语作业
}
If(输)
{
A发出讽刺
B发出讽刺
C发出讽刺
D发出讽刺
E发出讽刺
}
}
然而,真的这么简朴吗?首先你怎么知道你的心情在一天的哪个时刻好,而且刚幸亏谁人时刻想玩游戏,而且你的室友知道你在玩游戏, 换句话来所我们不知道在哪里插入这段代码。岂非你的室友一直用while循环做上面的判定,显然这不合适,因为你的室友要用饭睡觉等,而且如果有更多的人到场这个打赌,每个人都有自己相应的方法,那么我们的步调将需要不绝的举行扩展,而我们的委托和事件其中一个功能就是管理上述情况。
首先界说一个MySelf类表现你自己。里面有一个方法表现你在玩游戏,尚有两个事件,一个是玩游戏赢了的事件,一个是玩游戏输了的事件。
  1. class MySelf    {        public delegate void Play();        public event Play WinOther;//事件:赢了游戏        public event Play FailOther;//事件:输掉了游戏        Random random=new Random();            //玩游戏        public void PlayComputerGame()        {            //用游戏生成            if (random.Next(0, 2) == 1)            {                WinOther();                           }            else            {                FailOther();            }                  }}
复制代码
然后你在界说一个Other类表现你室友,里面有一些他的根本信息,好比名字name,尚有打赌输了之后要帮你写的课程名couse,以及打赌输了要做的事情CaoFen()和打赌赢了要做的事情WriteHomeWork()。尚有这个对象实例的时候我们还要传入他需要观察的对象mySelf,以便他可以订阅被观察者(我)相应的事件。也就是这两行代码:
  mySelf.WinOther += WriteHomeWork;
mySelf.FailOther += CaoFen;
  1. class Other    {        string name;        string couse;        public Other(string name, string couse,MySelf mySelf)        {            this.name = name;            this.couse = couse;            mySelf.WinOther += WriteHomeWork;            mySelf.FailOther += CaoFen;        }        public void WriteHomeWork()        {            Console.WriteLine(name+"说"+ "我输了!我给你写"+ couse+"作业");        }        public void CaoFen()        {            Console.WriteLine(name + "说:垃圾!你真菜");        }}
复制代码
最后我们实例化自己,然后再创造几个室友,我们知道每创造一个室友的时候他都会自动注册相应事件。然后当我玩游戏就会掉用相关事件里面的方法。
在现实场景中就相当于我的室友再我的手机里的王者荣耀APP里装了一个触发器,寻常他们该该该干嘛就干嘛,如果我突然心情好玩游戏,触发器触发,给他们发送一个信号,然后他们就会岑寂观察我,如果我输了,他们就会讽刺我,赢了的话就会悄悄各帮我写一门作业。而上面我们用While加if的那种模式就是他们不管用饭,还是睡觉他们都一直盯着我。这两者其中的好坏关系一目了然。
  1. using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 委托的应用场景{    class Program    {        static void Main(string[] args)        {            MySelf mySelf = new MySelf();            Other other1 = new Other("室友1", "语文", mySelf);            Other other2 = new Other("室友2", "数学", mySelf);            Other other4 = new Other("室友3", "英语", mySelf);            Other other5 = new Other("室友4", "MAYA", mySelf);            Other other6 = new Other("室友5", "化学", mySelf);            mySelf.PlayComputerGame();        }    }}
复制代码
来源:https://blog.csdn.net/a15970673567/article/details/111925873
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

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

本版积分规则

发布主题

专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )