namespace EventDemo
{
/// <summary>
/// 委托:委托别人干什么事
/// 事件:委托是类,事件相当于类的实例
///
/// 例子:猫叫 - 主人醒 - 老鼠跑 ///
/// 猫叫后,委托别人把主人醒的方法调用,也委托别人把老鼠跑的实例调用,还可以委托别人做更多的事
/// </summary>
internal class Program
{
static void Main(string[] args)
{
Cat cat = new Cat();
People people = new People();
// 委托让别人叫主人醒来
cat.CateBarking += new CateBarkingEventHandler(people.WakeUp);
Mouse mouse = new Mouse();
// 委托别人叫老鼠跑
cat.CateBarking += new CateBarkingEventHandler(mouse.MouseRun);
// 调用猫叫
cat.OnCatBarking(true);
Console.ReadLine();
}
}
// 定义一个猫叫的委托
public delegate void CateBarkingEventHandler(bool enable);
public class Cat
{
// 定义一个猫叫的事件
public event CateBarkingEventHandler CateBarking;
public void OnCatBarking(bool enable)
{
Console.WriteLine("猫叫");
// 执行委托
CateBarking?.Invoke(enable);
}
}
public class People
{
public void WakeUp(bool enable)
{
if (enable)
{
Console.WriteLine("主人醒");
}
else
{
Console.WriteLine("主人醒不来");
}
}
}
public class Mouse
{
public void MouseRun(bool enable)
{
if (enable)
{
Console.WriteLine("老鼠跑");
}
else
{
Console.WriteLine("主人没醒,老鼠不跑");
}
}
}
}