委托与事件(二)

上一篇“委托与事件(一)”,我讲的是委托,主要是为这篇讲的“事件”做铺垫的!

    学事件最开始明白这一点就够用了-----委托与事件本质上是一样的!

    到底一样在哪里呢!接下来慢慢读,你就能体会其中的含义了。

    写代码之前,我们先进入这样的一个场景!

    想象着在一个漆黑的夜晚里,

    猫抓老鼠,发现了老鼠的踪迹!

    猫,叫了一声!老鼠被吓跑了!

    狗发现有动静!“旺旺旺!”叫了!

    小偷躲了起来!

    人在睡梦中,被吵醒了!

    上面的场景且不说想象合不合理先,我们可以从上面的场景中提取出这几个关键字!

    猫追...

    鼠跑...

    狗叫...

    人醒...

    小偷躲...

    围绕着这几个关键字我们可以定义这么几个类:Cat、Dog、Mouse、People和Stealer,

    每个类对应的方法分别如下:

    public class Cat

    {

        public void Miao()

        {

            Console.WriteLine("猫追...");          

        }

    }  


   public class Dog

    {

        public static void Wang()

        {

            Console.WriteLine("狗叫了一声...");

        }

    }


   public class Mouse

    {

        public static void Run()

        {

            Console.WriteLine("老鼠跑了...");

        }

    }


   public class People

    {

        public static void Awake()

        {

            Console.WriteLine("人醒了...");

        }

    }


   public class Stealer

    {

        public static void Hide()

        {

            Console.WriteLine("小偷躲起来了...");

        }

    }

   如果根据上一篇《委托与事件(一)》中的知识点为下面的“Miao”方法声明一个委托我们要怎么做呢!

   根据这个知识点

 委托与事件(二)

     如果我们要为下面的这个方法写委托

        public void Miao()

        {

            Console.WriteLine("猫追...");          

        }

   是不是要这样为Miao

   public delegate void CatMiaoHandler();声明委托呢?

   委托声明了 我们就要为委托实例化

   public CatMiaoHandler CatMiaoHandlerMethod;//委托的实例

   因此Cat类里面的方法要改为以下:

  public class Cat

    {

        public delegate void CatMiaoHandler();//声明委托

        public CatMiaoHandler CatMiaoHandlerMethod;//委托的实例   

        //委托是一种类型....事件是委托类型的实例

        public void Miao()

        {

            Console.WriteLine("猫追...");

            //if (CatMiaoHandlerMethod != null)

            //{

            //    CatMiaoHandlerMethod();

            //}

            Console.WriteLine("委托");

            CatMiaoHandlerMethod?.Invoke();

        }      

    }

   先说如何用委托调用以上的方法:

       static void Main(string[] args)

        {

            Cat cat = new Cat();

            //使用委托调用

            cat.CatMiaoHandlerMethod = new Cat.CatMiaoHandler(Dog.Wang);//区别3

            cat.CatMiaoHandlerMethod += Mouse.Run;

            cat.CatMiaoHandlerMethod += People.Awake;

            cat.CatMiaoHandlerMethod += Stealer.Hide;

            cat.Miao();

            Console.ReadKey();

        }

   下面将说明又是如何用事件调用方法的!

   首先Cat类我们要修改成下面的样子:

   

  public class Cat

    {

        public delegate void CatMiaoHandler();//声明委托

        public event CatMiaoHandler CatMiaoHandlerMethodEvent;//声明事件,事件的本质就是委托的一个实例,加了Event关键字修饰

        //委托是一种类型....事件是委托类型的实例

        public void Miao()

        {

            Console.WriteLine("猫追...");

            //if (CatMiaoHandlerMethodEvent != null)

            //{

            //    CatMiaoHandlerMethodEvent();

            //}

            Console.WriteLine("事件");

            CatMiaoHandlerMethodEvent?.Invoke();

        }      

    }

   然后调用是这样的:

   

  static void Main(string[] args)

        {

            Cat cat = new Cat();

            //使用事件调用

            cat.CatMiaoHandlerMethodEvent += Dog.Wang;  

            cat.CatMiaoHandlerMethodEvent += Mouse.Run;

            cat.CatMiaoHandlerMethodEvent += People.Awake;

            cat.CatMiaoHandlerMethodEvent += Stealer.Hide;

            cat.Miao();

            Console.ReadKey();

        }

    说了这么多的废话,不知道大家从我这里学没学会看这个事件!

    最后把代码全部敲好了,运行结果是:委托与事件(二)

    

   在贴出几个关键地方的代码:

   委托与事件(二)


委托与事件(二)

委托与事件(二)

     委托和事件就讲这么多!

     懂了这两篇文章说的东西,相信你就很容易能看懂说的更深入一层的委托和事件了!