事件其实很简单,有些经验的都知道是用委托实现的,但是对于初学者,一开始就讲原理,往往会造成一定迷惑,所以我写了这篇最最简单的例子来说明事件怎么用。
现在模拟这种情况:
一只猫走在无人的街道上,突然发现老鼠的味道,就喵的叫了一声,此时,正在觅食的老鼠听到猫叫之后就赶紧跑,老鼠一跑,猫听到声音就去追。。。
要用程序如何实现这个逻辑呢?
首先应该有猫和老鼠这两个对象吧,然后猫是主动发现有情况才叫的,老鼠要时时刻刻听着有没有猫叫声,猫呢,也要随时注意有没有老鼠跑的声音,如果发现老鼠跑,就要去追。
看来我们要先定义两个类,猫和老鼠,代码如下:
public class Cat
{
public event EventHandler CryEventChanged;
/// <summary>
/// 闻到老鼠气味就叫
/// </summary>
public void Cry()
{
Console.WriteLine("黑猫警长:附近有新鲜老鼠屎的味道,弟兄们给我仔细的搜,别让他跑了");
if (CryEventChanged != null)
{
CryEventChanged(this, new EventArgs());
}
}
/// <summary>
/// 听到老鼠逃跑的脚步就追
/// </summary>
/// <param name="mouse">老鼠</param>
/// <returns>抓住没?</returns>
public bool Pursue(Mouse mouse)
{
Console.WriteLine("猫小编:各位童鞋想知道到底抓到老鼠没?那么请听下回继续分解。");
return false;
}
/// <summary>
/// 作为一名合格的黑猫警长,一定要具备敏锐的听力,只要老鼠一逃跑就知道
/// </summary>
/// <param name="sender">老鼠半只耳</param>
/// <param name="e">往哪儿跑了?</param>
public void mouse_FleeEventChanged(Object sender, EventArgs e)
{
Console.WriteLine("黑猫警长:十点钟方向有情况,兄弟们给我上,我留下来断后。");
Pursue((Mouse)sender);
}
}
{
public event EventHandler CryEventChanged;
/// <summary>
/// 闻到老鼠气味就叫
/// </summary>
public void Cry()
{
Console.WriteLine("黑猫警长:附近有新鲜老鼠屎的味道,弟兄们给我仔细的搜,别让他跑了");
if (CryEventChanged != null)
{
CryEventChanged(this, new EventArgs());
}
}
/// <summary>
/// 听到老鼠逃跑的脚步就追
/// </summary>
/// <param name="mouse">老鼠</param>
/// <returns>抓住没?</returns>
public bool Pursue(Mouse mouse)
{
Console.WriteLine("猫小编:各位童鞋想知道到底抓到老鼠没?那么请听下回继续分解。");
return false;
}
/// <summary>
/// 作为一名合格的黑猫警长,一定要具备敏锐的听力,只要老鼠一逃跑就知道
/// </summary>
/// <param name="sender">老鼠半只耳</param>
/// <param name="e">往哪儿跑了?</param>
public void mouse_FleeEventChanged(Object sender, EventArgs e)
{
Console.WriteLine("黑猫警长:十点钟方向有情况,兄弟们给我上,我留下来断后。");
Pursue((Mouse)sender);
}
}
下面这个是老鼠类:
public class Mouse
{
public event EventHandler FleeEventChanged;
/// <summary>
/// 听到猫叫声赶紧跑
/// </summary>
public void Flee()
{
Console.WriteLine("帅老鼠:我跑,我使劲跑,再加把劲,离洞口就三千米远了...");
if (FleeEventChanged != null)
{
FleeEventChanged(this, new EventArgs());
}
}
/// <summary>
/// 随时都要竖着耳朵听有没有猫叫声
/// </summary>
/// <param name="sender">猫</param>
/// <param name="e">从那个方向传来的?</param>
public void cat_CryEventChanged(object sender, EventArgs e)
{
Console.WriteLine("帅老鼠:我操,这都什么事儿?约鼠妹出来吃个饭也能碰到猫...赶紧跑吧.");
this.Flee();
}
}
{
public event EventHandler FleeEventChanged;
/// <summary>
/// 听到猫叫声赶紧跑
/// </summary>
public void Flee()
{
Console.WriteLine("帅老鼠:我跑,我使劲跑,再加把劲,离洞口就三千米远了...");
if (FleeEventChanged != null)
{
FleeEventChanged(this, new EventArgs());
}
}
/// <summary>
/// 随时都要竖着耳朵听有没有猫叫声
/// </summary>
/// <param name="sender">猫</param>
/// <param name="e">从那个方向传来的?</param>
public void cat_CryEventChanged(object sender, EventArgs e)
{
Console.WriteLine("帅老鼠:我操,这都什么事儿?约鼠妹出来吃个饭也能碰到猫...赶紧跑吧.");
this.Flee();
}
}
现在都理解逻辑了,咱们就开始主程序实现了,要有猫,有鼠,老鼠监听猫叫,猫监听老鼠跑, 最后猫先叫。
程序如下:
class Program
{
static void Main(string[] args)
{
Cat cat = new Cat();
Mouse mouse = new Mouse();
//老鼠随时听着有没有猫叫声
cat.CryEventChanged += mouse.cat_CryEventChanged;
//老猫随时听着有没有老鼠的脚步声
mouse.FleeEventChanged += cat.mouse_FleeEventChanged;
//老猫发现情况不对,大叫一声
cat.Cry();
Console.ReadLine();
}
}
{
static void Main(string[] args)
{
Cat cat = new Cat();
Mouse mouse = new Mouse();
//老鼠随时听着有没有猫叫声
cat.CryEventChanged += mouse.cat_CryEventChanged;
//老猫随时听着有没有老鼠的脚步声
mouse.FleeEventChanged += cat.mouse_FleeEventChanged;
//老猫发现情况不对,大叫一声
cat.Cry();
Console.ReadLine();
}
}
最后的结果是这样的:
到此为止。