码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【从头构筑C#知识体系】1.4 事件


    【系列文章目录】


    文章目录

    • 【系列文章目录】
    • 前言
    • 一、什么是事件
      • 1.事件是特殊的委托
      • 2.我理解的事件
    • 二、使用事件
      • 1.官方例子
      • 2.我的使用
    • 三、总结


    前言

    本篇介绍事件

    实际上事件我使用的比较少,委托用的更多,所以有说的不对的地方,欢迎指正

    【C#文档——事件】


    一、什么是事件

    1.事件是特殊的委托

    还是先看看文档吧

    事件和委托类似,事件是后期绑定机制。 实际上,事件是建立在对委托的语言支持之上的。

    那么事件与委托有什么不同呢?

    我们先看看文档中对事件在C#中的设计目的是什么

    • 在事件源和事件接收器之间启用非常小的耦合。 这两个组件可能不会由同一个组织编写,甚至可能会通过完全不同的计划进行更新。

    • 订阅事件并从同一事件取消订阅应该非常简单。

    • 事件源应支持多个事件订阅服务器。 它还应支持不附加任何事件订阅服务器。

    2.我理解的事件

    我的理解是这样的

    • 委托可以委托他人帮我们完成一件事情

    • 而事件是当我们完成一件事情时通知他人

    所以事件有以下特点

    • 事件可以被订阅,但不能被外部触发(外部可以+=和-=但不能Invoke)
    • 事件不可被完全单独指向某个函数(事件不可以=)

    举个具体点的栗子

    我在CSDN写博客,有人订阅了我

    在我发博客的时候,会通知所有订阅我的人,我发了新的博客

    别人也不能上我的账号替我发博客

    这就是可以被订阅,但不能被外部触发(

    截止至写本文的时候,我还只有一个粉丝(惨案。。。)

    但是我的博客并不是完全只为了这个粉丝而写的

    这就是不可被完全指向

    二、使用事件

    1.官方例子

    • 事件声明:

      public event EventHandler<FileListArgs> Progress;
      
      • 1

      EventHandler<FileListArgs> 的类型必须为委托类型

    • 事件调用:

      Progress?.Invoke(this, new FileListArgs(file));
      
      • 1
    • 订阅:

      EventHandler<FileListArgs> onProgress = (sender, eventArgs) =>
          Console.WriteLine(eventArgs.FoundFile);
      
      fileLister.Progress += onProgress;
      
      • 1
      • 2
      • 3
      • 4
    • 取消订阅

      fileLister.Progress -= onProgress;
      
      • 1

    2.我的使用

    实际使用中声明事件我习惯使用Action

    public event Action<EventArgs> MyEvent;   
    
    • 1

    三、总结

    • 事件基于委托
    • 事件不同于委托的地方
      • 只能在声明类的内部Invoke
      • 使用add和remove(+=和-=)
      • 不能使用set(=)

  • 相关阅读:
    平移矩阵中的数学思考
    百度OCR文字识别开发平台接口调试和切图
    hadoop2.2.0伪分布式搭建
    nacos教程
    问题解决:ModuleNotFoundError: No module named ‘skimage‘
    RIPEMD算法:多功能哈希算法的瑰宝
    事务隔离(二)
    Lite-Mono(CVPR2023)论文解读
    java代码审计-文件操作
    如何随心所欲调试HotSpot VM源代码?(改造为CMakeLists项目)
  • 原文地址:https://blog.csdn.net/ruanlinxi1994/article/details/125438625
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号