• C#:温故知新篇——委托与事件(委托)


    引子:委托是一种类型,它的地位与class 、struct、enum等是一样的,我们可以这样说:在任何一个可以声明class的地方都可以声明一个delegate。我们经常将委托与事件放在一起去理解,其实这只是委托的一个应用。要想理解委托必须透过现象究其本质,委托到底是干什么用的?

    现象:

    public delegate void MyDelegate();
    public delegate string MyDelegate(string name);
    

      从上面两个委托的声明,我们会发现委托看上去和方法的声明很类似。的确如此,委托有返回类型和相应参数列表,其实就是这个“返回类型”和“参数列表“限制了可以添加(或者称之为”注册“)到委托中的方法类型,即:只有返回类型和参数列表(参数类型、数目等)与委托一样的方法才能在委托中注册或添加。

    本质:委托的实质就是进行了方法的封装,只不过封装到委托中的方法有规定。从内存堆栈的角度去理解,委托封装的不是具体的方法,而是方法在内存堆中的地址(有点像C++中的函数指针,其实我个人也是这么理解)。另外,添加到委托中的方法是有先后顺序的,当程序调用委托时,它会按照这个方法列表中的先后顺序进行方法的调用,同时如果委托定义时指定了返回类型,并且委托中有多个方法,则在调用委托完毕返回的值是排在最后的方法的返回值,排在之前的方法的返回值都会被程序忽略。

    温故而知新——在不断学习技术的过程中,回过头来看看(”温故“)以前学习过的知识,或许会有新的发现和收获。

  • 相关阅读:
    vue-cli3.X快速创建项目
    Oracle中exists替代in语句
    Java根据子节点递归父节点
    记一次拆分包裹的算法
    Ajax下载文件
    Spring Boot 调用 MongoRepository时报org.springframework.beans.factory.NoSuchBeanDefinitionException错误的解决办法
    ORACLE拼日期
    记一次wordpress安装过程中遇到的问题及解决办法
    bootstrap动态添加Tab标签页
    Intellij Idea 2016 配置Tomcat虚拟目录
  • 原文地址:https://www.cnblogs.com/397926301/p/2404683.html
Copyright © 2020-2023  润新知