偶有所得及疑问

所谓回调、事件(event)、委托(delegate)的本质,莫非就是:

event、delegate本身是一个类,它重写了+=运算符,每次+=一个方法,就相当于把这个方法名作为变量传到event、delegate类的内部,保存到内部成员中,当event类被动触发,就调用这些成员。

这里面有个关键,就是一个类(event),如何能把一个方法作为成员变量。这里运用到了接口与其继承的机制,event类可以把一个接口作为自己的成员变量,该接口定义一个成员方法,只描述签名不实现。实现了该接口的类,都实现了该方法,都能作为变量值传进来。event类通过统一的代码(调用接口成员的方法)即可对注册的方法进行调用。

如下代码示例:

public class Resolve 
    {
        //持有一个接口的引用,通过构造方法初始化
       private IPlayer player;
       public Resolve(IPlayer player)
        {
            this.player = player;
        }

       public void Play()
        {
           player.Play();
        }
   }

不过这没有完整解释event或delegate的机制,因为C#不像C和C++具有指针的特性,无法将方法的指针作为变量传递,而event、delegate可以通过+=操作符直接将方法名传进去,而不用包成对象再传。关于其完整机制,待了解后再补充。

 

写的乱七八糟,不知自己下次看能否看懂自己在说什么。。

posted @ 2018-01-29 20:03  __sai  阅读(102)  评论(0编辑  收藏  举报