委托 - 事件

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("主人没醒,老鼠不跑");
            }
        }
    }
}

 

posted @ 2022-05-23 11:16  月下之神  阅读(23)  评论(0编辑  收藏  举报