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

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

  • 相关阅读:
    第二章:变量和简单数据类型
    第四章:操作列表
    第三章:列表简介
    老男孩Day6作业:计算器
    老男孩Day5作业:电子银行购物商城
    老男孩Day4作业:员工信息查询系统
    老男孩Day3作业:工资管理系统
    老男孩Day2作业:购物车程序
    改进地图的vo类
    slam kf
  • 原文地址:https://www.cnblogs.com/ximenxiazi/p/8379269.html
Copyright © 2011-2022 走看看