C# 事件(源代码组件概览)

源代码组件概览

需要在事件中使用的代码有5部分,如图15-4所示,后文会依次进行介绍。这些组件如下
所示

  • 委托类型声明事件和事件处理程序必须有共同的签名和返回类型,它们通过委托类型
    进行描述。
  • 事件处理程序声明订阅者类中会在事件触发时执行的方法声明。它们不一定是显式命
    名的方法,还可以是第14章描述的名方法或Lambda表达式。
  • 事件声明发布者类必须声明一个订阅者类可以注册的事件成员。当类声明的事件为
    public时,称为发布了事件。
  • 事件注册订阅者必须注册事件才能在事件被触发时得到通知。这是将事件处理程序与
    事件相连的代码。
  • 触发事件的代码发布者类中“触发”事件并导致调用注册的所有事件处理程序的代码。

使用事件时的5个源代码组件

声明事件

发布者类必须提供事件对象。创建事件比较简单一一只需要委托类型和名称。事件声明的语
法如下面的代码所示,代码中声明了一个叫作countADozen的事件。注意如下有关CountedADozen
事件的内容。

  • 事件声明在一个类中。
  • 它需要委托类型的名称,任何附加到事件(如注册)的处理程序都必须与委托类型的签
    名和返回类型匹配。
  • 它声明为public,这样其他类和结构可以在它上面注册事件处理程序。
  • 不能使用对象创建表达式(new表达式)来创建它的对象。

image

事件是成员

一个常见的误解是把事件视为类型,然而它不是。和方法、属性一样,事件是类或结构的成
员,这一点引出了几个重要的特性。

  • 由于事件是成员:
    • 我们不能在一段可执行代码中声明事件;
    • 它必须声明在类或结构中,和其他成员一样。
  • 事件成员被隐式自动初始化为null。
    事件声明需要委托类型的名称,我们可以声明一个委托类型或使用已有的委托类型。如果声
    明一个委托类型,它必须指定将被事件注册的方法的签名和返回类型。
    BCL声明了一个叫作EventHandler的委托,专门用于系统事件,本章后面会介绍。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/87372.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/87372.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

音视频会议服务搭建(设计方案-数据库sql)-02

前言 衔接上篇文章,这篇是相关的表结构sql语句记录 EchoMeet 会议系统数据库表结构设计 📋 设计概述 本文档定义了EchoMeet音视频会议系统的完整数据库表结构,采用微服务架构设计,支持高并发、可扩展的会议场景。 &#x1f3af…

MCPA2APPT 智能化演示文稿系统:A2A、MCP、ADK 三大架构全流程自动化

🚀 项目名称 MCPA2APPT / MultiAgentPPT —— 一站式 A2A MCP ADK 多智能体并发 PPT 生成解决方案 MCPA2APPT 是一款开源 AI PPT 创作神器,基于 A2A(Ask-to-Answer)、MCP(Multi-agent Control Protocol)和…

pyinstall打包mysql-connector-python后运行报错的问题!

简单的测试代码 # main.py import mysql.connectorDB_HOSTlocalhost DB_PORT3306 DB_NAMElover DB_USERroot DB_PASSWORDxxxx# 连接数据库 connection mysql.connector.connect(hostDB_HOST,portDB_PORT,databaseDB_NAME,userDB_USER,passwordDB_PASSWORD)if connection.is_c…

应对高并发:淘宝商品评论实时数据 API 高效接入开发实践

在电商平台的运营中,商品评论数据是用户决策、商家优化及平台运营的重要依据。淘宝作为国内领先的电商平台,其商品评论数据具有实时性强、数据量大、并发访问频繁等特点。本文将围绕淘宝商品评论实时数据 API 的高效接入展开,探讨在高并发场景…

踩坑日记:虚拟机桥接模式无法连接网卡

对于一名网安学生,我们渗透测试一般是需要虚拟机使用桥接模式。 但是vm直接设置成桥接模式并不能上网。还要进行如下配置 改一下这个桥接的地方。改成我们主机的网卡。 如何查看主机网卡呢? 设置搜索网络

Android 系统默认的Launcher3,Android 系统的导航栏(通常是屏幕底部)显示的 4 个快捷应用图标,如何替换这4个应用图标为客户想要的。

Android 系统默认的Launcher3, Android 系统的导航栏(通常是屏幕底部)显示的 4 个快捷应用图标, 如何替换这4个应用图标为客户想要的。 开发云 - 一站式云服务平台 按如下方式可以修改应用图标。 diff --git a/packages/apps/Launcher3/res/xml/default_workspace_5x6_no_a…

maker-pdf 文档文字识别,并用python实现

下面我将详细讲解maker-pdf文档文字识别的技术原理、特点,并提供完整的Python实现代码及优化方案。内容结合最新文档和OCR技术实践,适合开发者直接集成到项目中。 一、maker-pdf 核心技术解析 maker-pdf是基于深度学习的端到端OCR工具链,专…

Go基础(Gin)

go mod init my-gin-app 初始化一个 Go 项目,创建一个go.mod文件go mod tidy 自动整理项目依赖,确保go.mod和go.sum文件与代码实际使用的依赖一致go mod init:创建项目的 “依赖说明书”。go mod tidy:整理 “说…

21、鸿蒙学习——使用App Linking实现应用间跳转

简介 使用App Linking进行跳转时,系统会根据接口传入的uri信息(HTTPS链接)将用户引导至目标应用中的特定内容,无论应用是否已安装,用户都可以访问到链接对应的内容,跳转体验相比Deep Linking方式更加顺畅。…

Cursor无限邮箱续费方法

1.注册无限邮箱2925 2.“其他邮箱” 3.点击左下角添加邮箱 4.管理员身份运行Windos PowerShell 5.输入该指令并运行,修改机器码 irm https://aizaozao.com/accelerate.php/https://raw.githubusercontent.com/yuaotian/go-cursor-help/refs/heads/master/scripts/…

LeetCode Hot100(图论)

200. 岛屿数量 题意 给你一个由 1(陆地)和 0(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外,你…

Ubuntu Gnome 安装和卸载 WhiteSur-gtk-theme 类 Mac 主题的正确方法

WhiteSur-gtk-theme 是一个流行的 GNOME 桌面主题,可以让 Ubuntu 的桌面环境看起来像 macOS。以下是安装和卸载 WhiteSur-gtk-theme 的详细步骤,包括解释每个命令的作用。 一、安装 WhiteSur-gtk-theme 1. 准备工作 在安装主题之前,建议确…

如何在DataGear 5.4.1 中快速制作SQL服务端分页的数据表格看板

DataGear 数据可视化分析平台(http://datagear.tech/) 在新发布的5.4.1版本中,内置表格图表新增了serverSidePaging选项,仅需通过简单的配置,即可为表格添加服务端分页、关键字查询、排序功能。 本文以SQL数据集作为数…

股指期货套保比例怎么算?

在金融市场里,套期保值(套保)是一种常见的风险管理手段,目的是通过期货市场对冲现货市场的风险。而套保比例(也叫套保比率)的计算,是套保操作的核心。简单来说,套保比例就是“期货头…

逻辑回归(Logistic Regression)算法详解

文章目录 一、逻辑回归:从线性回归到二分类的跨越1.1 逻辑回归简介1.2 Sigmoid函数:概率映射的数学本质1.3 参数 w w w 和 b b b 对Sigmoid的调控1.4 从线性回归到分类1.5 决策边界:从概率到类别(结合图3、图4) 二、…

HTTPS通信流程:SSL/TLS握手全解析

2021,2022,2023年1-8月看了很多技术书籍,现在想来忘了很多,用到的也不多,但是因为提前接触过,所以很多新东西,接受起来,比预想的要容易些。最近突然想要回忆下HTTPS,居然…

SVG 在 VSCode 中的使用与优势

SVG 在 VSCode 中的使用与优势 引言 SVG(可缩放矢量图形)是一种基于可扩展标记语言的图形图像格式,与传统的位图格式(如 JPEG 或 PNG)相比,SVG 图像具有更高的灵活性和可缩放性。随着前端开发领域的不断发展,SVG 在网页设计中的应用越来越广泛。本文将介绍 SVG 在 Vis…

Ubuntu开放mysql 3306端口

Ubuntu开放mysql 3306端口 1. 检查 UFW 防火墙规则2. 检查 iptables 规则 1. 检查 UFW 防火墙规则 sudo ufw status verbose | grep 3306若输出包含 3306/tcp ALLOW,表示端口已开放(如下) ubuntuUbuntu2404:~$ sudo ufw status verbose | grep 3306 3306/tcp …

CentOS 卸载docker

1、停止docker服务 systemctl stop docker.socket systemctl stop docker systemctl stop containerd 2、列出已安装的docker包 yum list installed | grep -i docker 输出如下: containerd.io.x86_64 1.6.33-3.1.el7 docker-ce-stab…

MySQL数据库----DML语句

目录 DML-介绍SQL-DML-添加数据SQL-DML-修改数据SQL-DML-删除数据 DML-介绍 DML英文全称是 Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增删改操作。 添加数据(INSERT) 修改数据(UPDATE&#xff…