C# 事件(發布者和訂閱者)

發布者和訂閱者

很多程序都有一個共同的需求,即當一個特定的程序事件發生時,程序的其他部分可以得到
該事件已經發生的通知。

發布者/訂閱者模式(publisher/subscriber pattem)可以滿足這種需求。在這種模式中,發布
者類定義了一系列程序的其他部分可能感興趣的事件。其他類可以“注冊",以便在這些事件發
生時收到發布者的通知。這些訂閱者類通過向發布者提供一個方法來“注冊"以獲取通知。當事
件發生時,發布者“觸發事件",然后執行訂閱者提交的所有事件。

由訂閱者提供的方法稱為回調方法,因為發布者通過執行這些方法來“往回調用訂閱者的方
法”。還可以將它們稱為事件處理程序,因為它們是為處理事件而調用的代碼。圖15-1演示了這
個過程,展示了擁有一個事件的發布者以及該事件的三個訂閱者。

發布者和訂閱者

下面是一些有關事件的重要事項。

  • 發布者(publisher)發布某個事件的類或結構,其他類可以在該事件發生時得到通知。
  • 訂閱者(subscriber)注冊并在事件發生時得到通知的類或結構。
  • 事件處理程序(event)由訂閱者注冊到事件的方法,在發布者觸發事件時執行。
    事件處理程序方法可以定義在事件所在的類或結構中,也可以定義在不同的類或結構中。
  • 觸發(raise)事件調用(invoke)或觸發(fire)事件的術語。當事件被觸發時,所有
    注冊到它的方法都會被依次調用。

上一章介紹了委托。事件的很多部分都與委托類似。實際上,事件就像是專門用于某種特殊
用途的簡單委托。委托和事件的行為之所以相似,是有充分理由的。事件包含了一個私有的委托,
如圖15-2所示。

事件有被封裝的委托

有關事件的私有委托需要了解的重要事項如下。

  • 事件提供了對它的私有控制委托的結構化訪問。也就是說,你無法直接訪問委托。
  • 事件中可用的操作比委托要少,對于事件我們只可以添加、刪除或調用事件處理程序。
  • 事件被觸發時,它調用委托來依次調用調用列表中的方法。
    注意,在圖15-2中,只有+=和-=運算符在事件框的左邊。這是因為它們是事件唯一允許的
    操作(除了調用事件本身)。
    圖15-3演示了一個叫作lncrementer的類,它按照某種方式進行計數。
  • lncrementer定義了一個CountedADozen事件,每次累積到12個項時將會觸發該事件。
  • 訂閱者類Dozens和SomeOtherClass各有一個注冊到CountedADozen事件的事件處理程序。
  • 每當觸發事件時,都會調用這些處理程序。

具有一個事件的類的結構和術語

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/87189.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/87189.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/87189.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

RediSearch高性能全文搜索引擎

RediSearch 是 RedisLabs 團隊開發的一個高性能全文搜索引擎,可作為一個 Redis Module 運行在 Redis 上。 Redis7:百萬數據級Redis Search 超越 ElasticSearch Redis Search是基于Redis的全文搜索引擎模塊(RediSearch)&#xff0c…

菜譜大全——字符串處理藝術:從文本解析到高效搜索 [特殊字符][特殊字符]

目錄 前言一、現實場景二、技術映射2.1 基礎刀工:String類2.2 高效剁餡:StringBuilder2.3 精準雕刻:正則表達式 三、知識點呈現3.1 String vs StringBuilder vs StringBuffer3.2 正則表達式核心語法速查3.3 字符串拼接性能陷阱 四、代碼實現五…

webpack+vite前端構建工具 -答疑

webpack答疑 1 輸入webpack命令,執行的是全局版本還是本地版本的webpack 當在命令行窗口輸入webpack命令時,其執行優先級可通過以下步驟明確判斷: 1.1 【全局安裝優先機制】 執行原理:系統會按照環境變量PATH的順序逐級查找可執…

API接口開放平臺 Crabc 3.4 發布

Crabc 是一款 API 接口開發平臺,企業級接口管理、SQL2API 平臺。支持動態數據源、動態 SQL 和標簽, 支持接入(mysql、oracle、達夢、TiDB、hive、es 和 mongodb)等 SQL 或 NoSQL 數據源,在線可視化編寫 SQL 快速發布接…

PD快充協議芯片XSP04D支持全協議+支持串口通訊+支持與主板共用一個Type-C

隨著Type-C接口的充電器普及,市面上的PD充電器越來越多,小家電產品可不配充電器,使用Type-C接口,然后加入一顆PD協議取電協議芯片XSP08即可讓充電器/充電寶/車充等電源輸出9V/12V/15V/20V電壓給產品供電。 針對各種各樣的不同需求…

C# 高效加載txt文件內容

在 C# 中,高效加載 TXT 文件內容可以通過多種方法實現,具體方法的選擇取決于文件的大小和讀取需求。以下是一些常用的方法: 1. 使用 File.ReadAllText 如果文件比較小,并且你希望一行一行地讀取整個內容,可以使用 Fi…

(2)pytest執行用例的規則

1. 簡介 今天主要學習一下pytest的執行用例的規則。 2. 通過help幫助查看pytest如何使用 .查看pytest命令行參數,可以用pytest -h 或pytest --help查看 3. 用例設計原則 文件名以test_*.py文件和*_test.py以test_開頭的函數以Test開頭的類以test_開頭的方法所有的…

InnoDB數據頁

導讀: 我們已經知道了頁是數據庫存儲的基本單位,知道了一條行記錄的存儲格式是怎樣的,當數據越來越多時,那一條條行記錄具體又是怎么在頁中被組織起來的呢? 一、InnoDB數據頁結構 二、總結 1、一條條行數據是如何在數…

世賽背景下,中職物聯網應用與服務賽項實訓解決方案

一、世賽背景與物聯網應用賽項概述 1.1 世賽發展歷程及對中職教育的影響 世界技能大賽(WorldSkills Competition,簡稱世賽)自1950年創立以來,已經成為全球范圍內展示職業技能水平的重要賽事。截至2024年,世賽已成功舉…

【攻防篇】解決:阿里云docker 容器中自動啟動xmrig挖礦-- 實戰

文章目錄 場景一、問題二、原因三、解決方案1、控制臺處理2、 [清除與防護](https://blog.csdn.net/ladymorgana/article/details/148921668?spm1001.2014.3001.5501)1. 緊急處理:停止挖礦進程2. 清理被感染的容器3. 防護措施:防止再次被入侵4. 排查入侵…

飛算智造JavaAI:智能編程革命——AI重構Java開發新范式

文章目錄 引言:當傳統Java開發遇上AI一、技術架構解析1.1 核心架構圖1.2 關鍵技術棧 二、實戰演示:從需求到代碼的全AI輔助2.1 場景:電商優惠券系統開發2.2 代碼生成實例2.3 智能調試演示 三、與傳統開發模式對比測試3.1 基準測試數據3.2 典型…

[特殊字符] 分享裂變新姿勢:用 UniApp + Vue3 玩轉小程序頁面分享跳轉!

在如今流量成本日益攀升的移動互聯網時代,"用戶分享拉新" 成為了增長的重要策略。而微信小程序作為天然具備社交傳播力的平臺,提供了較完善的分享機制支持。本文將從實戰角度出發,手把手教你如何使用 uni-app Vue3 構建一個支持「…

[創業之路-458]:企業經營層 - 藍海戰略 - 重構價值曲線、整合產業要素、創造新需求

“重構價值曲線、整合產業要素、創造新需求”是藍海戰略中實現價值創新的核心路徑,它們構成了一個從內部優化到外部協同,再到市場顛覆的完整邏輯鏈條。以下從理論框架、實踐方法和企業案例三個維度展開分析: 一、重構價值曲線:打…

慢查詢引發對mysql索引的探索

目錄 一、索引分類 1.1 聚簇索引結構 1.2 非聚簇索引(二級索引) 1.3 主鍵索引 1.4 唯一索引 1.5 普通索引 1.6 前綴索引 1.7 聯合索引 1.8 索引下推 1.9 索引區分度 二、優化索引的方法 2.1 索引的特點 2.2 適合創建索引的情況 2.3 不適合創建索引的情況 2.4 優…

啟用不安全的HTTP方法

背景: 今天被安全檢測出一個這樣的問題:啟用不安全的HTTP方法。DELETE方法是用來調試web服務器連接的http方式,支持該方式的服務器文件可能被非法刪除;PUT方法用來向服務器提交文件;TRACE方法本用于客戶端測試到服務器…

fvcom 水深文件dep制作

fvcom 水深文件dep制作 fvcom 水深文件dep制作20250630 本次案例網格和水深展示 vv image Figure 1 Model domain 本次制作其它驅動文件的輸入文件為yellowsea.2dm 格式2dm; 文件內容格式詳細介紹參考: https://www.xmswiki.com/wiki/SMS:2D_Mesh_Files_*.2dm …

ViewModel是EventFlow-State映射

ViewModel負責組裝界面狀態State。引發State變換的原因有很多,比如用戶點擊某個按鈕,一次網絡請求受到應答,一次本地數據庫查詢返回結果等等。因此ViewModel是根據各種事件生成State的對象,換句話說,是一個從多個事件流…

javaweb Day2

PreparedStatement作用: 預編譯SQL語句并執行: 預防SQL注入問題 SQL注入:SQL注入是通過操作輸入來修改事先定義好的SQL語句,用以達到執行代碼對服務器進行攻擊的方法。

Java項目:基于SSM框架實現的中學教學管理系統【ssm+B/S架構+源碼+數據庫+畢業論文+開題報告】

摘 要 現代經濟快節奏發展以及不斷完善升級的信息化技術,讓傳統數據信息的管理升級為軟件存儲,歸納,集中處理數據信息的管理方式。本景海中學教學管理系統就是在這樣的大環境下誕生,其可以幫助管理者在短時間內處理完畢龐大的數據…

JVM調優實戰 Day 15:云原生環境下的JVM配置

【JVM調優實戰 Day 15】云原生環境下的JVM配置 文章標簽 jvm調優, 云原生, Java性能優化, JVM參數配置, 容器化部署, Kubernetes, Docker, JVM在云原生中的應用 文章簡述 隨著云原生技術的普及,Java 應用越來越多地運行在容器(如 Docker)和…