《c#编程指导》学习笔记(二)

mac2022-06-30  24

        今天主要学习了委托和事件,以前编程的时候也或多或少接触过这方面的知识,但是对他们也没有一个较为深入了解特别是其工作原理就更不了了之了。

        首先从定义开始吧,委托(msdn上是这么说的):是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的使用可以像其他任何方法一样,具有参数和返回值。事件的定义:类在发生其关注的事情时用来提供通知的一种方式,事件使用委托来为触发时将调用的方法提供类型安全的封装。所以事件和委托联系比较紧(不知道可不可以这样说)。那么怎么使用委托和事件呢,现在有这样一个例子:现在有一只猫和两只老鼠,当猫叫的时候,那么老鼠就开跑。这正好可以用事件来处理这个程序,也就是说猫叫的方法触发时,老鼠就执行跑的方法。在这里让猫叫触发时通知老鼠就可以用到事件和委托了。好了,具体的实现方式如下:

       首先声明一个猫类:

 

Code class Cat    {        private string name;        public Cat(string name)        {            this.name = name;        }        public delegate void CatShoutEventHandle();//声明一个猫叫的委托        public event CatShoutEventHandle CatShout;//声明一个猫叫事件,其事件类型是委托catshouteventhandle       public  void Shout()        {            Console.WriteLine("喵,我是猫{0}来了。", name);            if (CatShout != null//如果登记对象事件不为空,则执行该事件            {                CatShout();            }        }    }

 

         再声明一个老鼠类:

 

Code class Mouse    {        private string name;        public Mouse(string name)        {            this.name = name;        }        public void Run()        {            Console.WriteLine("我是老鼠{0}猫来了快跑!", name);        }    }

 

   对于要让整个过程实现,还要一个关键的Main函数:

 

Code static void Main(string[] args)        {            Cat cat = new Cat("Jim");            Mouse mouse1 = new Mouse("lily");            Mouse mouse2 = new Mouse("Tom");            cat.CatShout += new Cat.CatShoutEventHandle(mouse1.Run);            cat.CatShout += new Cat.CatShoutEventHandle(mouse2.Run);            cat.Shout();            Console.Read();        }

 

其中cat.CatShout += new Cat.CatShoutEventHandle(mouse1.Run);就是比较关键的部分了,这句代码的意思是:将老鼠的RUN方法通过实例化委托Cat.CatShoutEventHandle登记到猫的CatShout事件中。这样猫在执行shout方法时就可以触发执行老鼠的RUN方法了。

      这只是 委托和事件的一些很浅显的认识,对于更为深入的理解就以后实际编程过程中体会了。

转载于:https://www.cnblogs.com/LoveHong/archive/2009/04/15/1436570.html

最新回复(0)