zoukankan      html  css  js  c++  java
  • 委托和事件一直以来的痛

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

          中国有句古话,"三思而后行"。我想在英文可以归纳为: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结尾。

  • 相关阅读:
    Struts2使用json中要注意的几点
    JS实现关闭当前子窗口,刷新父窗口
    oracle中rownum效率低的原因以及解决办法
    URL传中文参数引发的乱码问题
    oracle存储过程
    Map.keyset() 使用详解
    oracle跨库查询dblink的用法
    Java中getResourceAsStream的用法
    如何删除存在多个重复记录中的一个
    cocos2d里面如何实现mvc系列
  • 原文地址:https://www.cnblogs.com/im/p/1430720.html
Copyright © 2011-2022 走看看