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
英文地址,請注明出處:http://en.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…