C#中事件的使用-猫和老鼠

事件使用案例:猫叫 引发老鼠逃跑,主人惊醒
事件的定义:事件是委托类型的类的数据成员,
                  表示类(对象)的偶发性行为,当这个行为发生时,往往会引发其他行为的自动执行
                  事件是用来实现两个或多个行为的联动调用的
使用事件的步骤(四个):
                  1.定义事件(public event 委托类型 事件名;   因此需要提前定义需要的委托(代表一类方法))
                  2.注册事件(添加事件触发时 需要执行的行为)
                  3.触发事件(将事件的触发写入一个方法行为中,通过该行为的调用,来触发事件,从而引发其余注册行为的调用)
                  4.调用触发事件的方法
       注意:通常1、3写在定义端,定义在哪就触发在哪(同一个类 对象)
                      2、4写在调用端(其中注册的行为可以使任何对象的规范(同一类型的)行为)

事件是委托的一种使用方式:(本质上事件就是一种特殊的委托:通过注册(也可以理解为绑定)方法,调用事件(委托)来调用注册的方法)
 

class Program
    {
        //调用端
        static void Main(string[] args)
        {
            //因为事件定义在该类中,该类是事件源(猫叫),所以需要创建该对象 用于调用事件注册方法
            Cat cat = new Cat();

            //事件触发后 会相应的行为对象(老鼠跑、人惊醒),因此需要创建出对象,用于注册其中的方法行为
            Mouse mouse = new Mouse();
            Master master = new Master();

            //步骤二:注册事件  当该事件触发时 则会执行对应注册的方法行为(注册任何相同类型(对象)的行为都可以)
            cat.On_Call += mouse.Run;
            cat.On_Call += master.Weak;
            //取消注册
            cat.On_Call -= master.Weak;

            //步骤四:调用触发事件的方法
            cat.Call();//当执行该方法时,触发事件(因为事件的调用在该方法中,即与之绑定了),因此触发注册的行为

        }
    }

//定义端

    //定义委托
    delegate void Handler();

    /// <summary>
    /// 猫类(事件源)
    /// </summary>
    class Cat
    {
        /// <summary>
        /// 步骤一:定义事件(event可以省略)
        /// </summary>
        public event Handler On_Call;

        public void Call()
        {
            Console.WriteLine("猫叫了");
            if (On_Call != null)//如果事件不为空 则可以触发事件
                //步骤三:调用事件(因为该对象是事件源,事件是由该对象触发的,所以事件定义在哪里就在哪里触发)
                On_Call();
        }


    }
    class Mouse
    {

        public void Run()
        {
            Console.WriteLine("老鼠逃跑了");
        }
    }
    class Master
    {
        public void Weak()
        {
            Console.WriteLine("主人惊醒了");
        }
    }

猜你喜欢

转载自blog.csdn.net/weixin_44906202/article/details/128323244