zoukankan      html  css  js  c++  java
  • 偶有所得及疑问

    所谓回调、事件(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可以通过+=操作符直接将方法名传进去,而不用包成对象再传。关于其完整机制,待了解后再补充。

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

  • 相关阅读:
    css属性选择器
    css各浏览器的兼容性写法
    使元素的宽度由内容撑开的方法
    DOM应用
    css圣杯布局、等高布局
    总结css兼容问题
    table注意事项
    相对定位、绝对定位在IE6的问题
    IE6,7下li标签的间隙
    清除浮动的7种方法
  • 原文地址:https://www.cnblogs.com/ximenxiazi/p/8379269.html
Copyright © 2011-2022 走看看