C#委托和事件的应用场景
接触过委托和事件的人都知道,它们的语法都很简朴,真正的难点是在什么场景中使用它们的特性来使用它。下面我希望通过我分析下面的这个案例可以读者有一些启发。有错误的地方还望指出,一起进步,谢谢!
假设你在一天的某个心情好的时刻会玩王者荣耀,你的5个寝室友(A,B,C,D,E…)将在一起打赌,如果你赢了,5个寝室友悄悄各帮你写一门作业,如果你输了你的室友会对你发出讽刺。
有些同学大概会以为这个题目很简朴,不就是if判定吗。
If(心情好,在玩游戏)
{
If(赢)
{
A帮你写英语作业
B帮你写语文作业
C帮你写数文作业
D帮你写化学作业
E帮你写英语作业
}
If(输)
{
A发出讽刺
B发出讽刺
C发出讽刺
D发出讽刺
E发出讽刺
}
}
然而,真的这么简朴吗?首先你怎么知道你的心情在一天的哪个时刻好,而且刚幸亏谁人时刻想玩游戏,而且你的室友知道你在玩游戏, 换句话来所我们不知道在哪里插入这段代码。岂非你的室友一直用while循环做上面的判定,显然这不合适,因为你的室友要用饭睡觉等,而且如果有更多的人到场这个打赌,每个人都有自己相应的方法,那么我们的步调将需要不绝的举行扩展,而我们的委托和事件其中一个功能就是管理上述情况。
首先界说一个MySelf类表现你自己。里面有一个方法表现你在玩游戏,尚有两个事件,一个是玩游戏赢了的事件,一个是玩游戏输了的事件。
- 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;
- 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的那种模式就是他们不管用饭,还是睡觉他们都一直盯着我。这两者其中的好坏关系一目了然。
- 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
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |