委托和事件一直以来的痛

      学习编程已经好几年了,但是对于很基础的知识还是没有做到心中有数,以致在开发过程中,总是显的很不踏实。希望能够通过博客,通过自己的真正思考,把点滴的知识点理清,理顺。即使将来我不走技术这条路,相信这种总结和思考的能力在任何地方都是很有用的。

      中国有句古话,"三思而后行"。我想在英文可以归纳为:what?why?how?翻译成中文可以这样理解:某件事是什么?为什么要做这件事?怎么做?经过这样的“三思”之后,我想做某件事就显得有意义,更加理性。而对于某项技术的学习,我们也试着如此“三思”一番,也将是必要的!

      在此,我只记下一些思路,而没有更细节的东西。 

      1.什么是委托?

            委托是指向方法的指针链。它可以将方法作为参数进行传递。它也是按类进行编译。它代表了方法的参数类型和返回值。

      2.为什么要使用委托?

            委托的可以将方法作为参数进行传递的特性,使得委托可以很好的将相互关联的两个对象进行解耦。由于委托是指向方法的指针链,使得通过委托可以达到,一个对象的变化能够通知到其他依赖的对象。

      3.如何使用委托?

            委托的申明

            public delegate void MyDelegate(string param);

            委托的定义

            MyDelegate myDelegate = new MyDelegate(绑定的方法);

            MyDelegate myDelegate;

            委托的使用

            myDelegate = 方法名;//将委托和方法进行绑定

            myDelegate("参数");//调用委托

      4.什么是事件?

            事件是对委托类型的封装,其本质也是委托,只是对其访问权限做了限制:申明为public 或 proteced类型的事件,对内总是private,而对外为申明的类型。事件实际上是给委托加了一层皮。

      5.为什么要使用事件?

            使用事件机制主要是对委托的访问权限加以限制。

      6.如何使用事件?(观察者模式)

            事件的申明

            public event MyDelegate myEvent;

            和申明委托仅仅是多了一个event关键字。

            事件的定义(不存在)

            事件的使用

            myEvent(参数);

            观察者模式:定义为对象间的一对多的依赖关系,以便当一个对象的状态发生变化的时候,依赖于它的其他对象会被自动的告知并更新。

            观察者模式不一定要使用事件机制。      

            观察者模式中的类:被监视对象,监视者,主程序。

            被监视对象(subject):包含监视者感兴趣的信息,当监视者对此信息感兴趣,并对其注册以后,当某事件发生后,将会通过回调函数通知监视者(可以有多个)。

            监视者(Observer):对被监视对象感兴趣,当被监视对象由于某事件发生时,触发回调后,监视者要处理该事件。

            主程序:通过注册的方式搭连二者。

       7..NET中的事件相关的使用规则

            委托一般以EventHandler结尾;事件是委托去掉EventHandler;委托原型:void返回值,两个输入参数:一个Obejct类型(被监视对象),一个EventArgs类型或继承至EventArgs类型。继承至EventArgs的类以EventArgs结尾。

原文地址:https://www.cnblogs.com/im/p/1430720.html