C#事件

来源:https://www.cnblogs.com/chi8708/p/18187708
-Advertisement-
Play Games

EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...


C#事件

概述

定義

類或對象可以通過事件向其他類或對象通知發生的相關事情。 發送(或引發)事件的類稱為“發佈者”,接收(或處理)事件的類稱為“訂閱者”。
事件是一種特殊的多播委托,是委托實例變數, 事件只能在類的內部定義,只能從聲明它的類中進行調用。 外部只能訂閱和取消訂閱事件。

事件的組成部分

C#事件由以下三個部分組成:

  • 事件發佈者:定義事件的對象。事件發佈者負責觸發事件並通知訂閱者。
  • 事件參數:事件發生時需要傳遞的信息。事件參數可以是任何類型的對象。如果事件不需要傳遞參數,則可以使用 EventArgs 類。
  • 事件訂閱者:訂閱事件的對象。事件訂閱者會在事件發生時執行相應的操作。

基本語法

  1. 發佈者】事件聲明
    public event 委托類型 事件名;
  public event DelBtnClick OnBtnClick;
  1. 訂閱者】事件訂閱 +=,取消訂閱-=
var page = new Page();
page.OnBtnClick +=Page_OnBtnClick;

	private static void Page_OnBtnClick(ClickEventArgs eventArgs)
	{
	MessageBox.Show($"客戶端,按鈕點擊後回調 eventArgs:{eventArgs.ClickCount}");
	}
  1. 發佈者】事件觸發。其中new ClickEventArgs(1) 為回傳給訂閱者的自定義事件參數
 OnBtnClick?.Invoke(new ClickEventArgs(1));//觸發事件時 把事件參數傳遞給訂閱者。
  1. 發佈者】自定義事件參數。 繼承 EventArgs
public class ClickEventArgs : EventArgs
{
		public ClickEventArgs(int clickCount)
		{
		ClickCount = clickCount;
		}

		public int ClickCount { get; private set; }
}

常見用法/應用場景

事件的優點

  • 松耦合:事件發佈者和訂閱者之間是松耦合的,這意味著它們不需要知道彼此的內部實現細節。這使得代碼更易於維護和擴展。
  • 可擴展性:事件可以支持多個訂閱者,這使得代碼易於擴展以支持新的功能。
  • 非同步性:事件是非同步的,這意味著事件訂閱者可以在事件發生時執行任何操作,而不會阻塞事件發佈者。
    事件的應用示例

事件的缺點

  • 性能開銷性能: 事件會帶來一些性能開銷,因為需要維護事件處理程式列表,因此應儘量避免頻繁觸發事件。
  • 複雜性: 事件可能會使代碼更加複雜,尤其是當涉及到多個事件和處理程式時
  • 事件安全:事件處理程式通常在不同的線程上執行,因此需要考慮線程安全問題。
  • 事件濫用:避免過度使用事件,否則會導致代碼難以維護。

常見的應用場景

  • GUI編程:事件通常用於響應用戶交互,例如按鈕單擊、文本框輸入等。
  • 網路編程:事件可用於通知應用程式有關網路活動的事件,例如連接建立、數據接收等。
  • 系統編程:事件可用於通知應用程式有關係統活動的事件,例如進程啟動、設備連接等。

結束語言

C# 事件是一種強大的機制,可用於實現松耦合、可擴展和可重用的代碼。但是,事件也可能會帶來一些性能開銷和複雜性。

引用

  1. 博文示例代碼 https://github.com/chi8708/DotNetNote/blob/master/Note.Basic/05event.cs

  2. 參考文獻


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 運算符與表達式 Created: November 29, 2023 10:38 PM 運算符 運算符 釋義 +、-、*、/ 略 **、//、% 乘方、整除(向下取整至最接近的整數、餘數 <<、>> 指的是二進位左右移 &按位與 按位與是針對二進位數的操作,指將兩個二進位數的每一位都進行比較,如果兩 ...
  • 在現代社會中,機動車已經成為人們生活的重要交通工具。而行駛證作為機動車的身份證明,具有重要的法律效力。然而,對於行駛證上的信息進行手工識別是一項繁瑣的工作,容易出現錯誤,並且耗時較長。為瞭解決這個問題,挖數據平臺提供了行駛證OCR識別Api介面,可以對行駛證上的信息進行快速準確地識別和提取。 這個A ...
  • 大家好,我是 Java陳序員。 問君能有幾多愁,開源項目解千愁! 今天,給大家介紹一個快速開發平臺,完全開源可商用! 關註微信公眾號:【Java陳序員】,獲取開源項目分享、AI副業分享、超200本經典電腦電子書籍等。 項目介紹 SmartAdmin —— 一個簡潔、高效、安全的快速開發平臺,以高質 ...
  • 大家好,我是R哥。 金三銀四結束了,上個月分享了一個 35K 入職的面試輔導案例: 35K*14 薪入職了,這公司只要不裁員,我能一直呆下去。。 今天再分享一個上個月讓人很有成就感的面試輔導 case: 外包、空窗四個月、薪資 10k、996 ——> 甲方公司、薪資15k、早九晚六(WLB),從報名 ...
  • 當一個線程被啟動後,如果再次調start()方法,將會拋出IllegalThreadStateException異常。 這是因為Java線程的生命周期只有一次。調用start()方法會導致系統在新線程中運行執行體,但是如果線程已經結束,則不能再次使用,需要重新創建一個新的線程對象並調用start()... ...
  • 正文 昨天玩到了凌晨 3 點,今天睡了一天…… 斷斷續續睡到 12 點起床,下午又從 5 點睡到了 7 點。我願稱之為睡神……. 其它時間就是做工作日一直沒時間做的雜事,比如洗衣服,刷鞋,換洗被套什麼的,還挺花時間。用了得有兩三個小時。 所以昨天說的今天開擺,那是真的開擺了 (笑。 現在晃一下頭,能 ...
  • 1. Spring6 的JdbcTemplate的JDBC模板類的詳細使用說明 @目錄1. Spring6 的JdbcTemplate的JDBC模板類的詳細使用說明每博一文案2. 環境準備3. 數據準備4. 開始4.1 從數據表中插入(添加)數據4.2 從數據表中修改數據4.3 從數據表中刪除數據4 ...
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
一周排行
    -Advertisement-
    Play Games
  • 前言 微服務架構已經成為搭建高效、可擴展系統的關鍵技術之一,然而,現有許多微服務框架往往過於複雜,使得我們普通開發者難以快速上手並體驗到微服務帶了的便利。為瞭解決這一問題,於是作者精心打造了一款最接地氣的 .NET 微服務框架,幫助我們輕鬆構建和管理微服務應用。 本框架不僅支持 Consul 服務註 ...
  • 先看一下效果吧: 如果不會寫動畫或者懶得寫動畫,就直接交給Blend來做吧; 其實Blend操作起來很簡單,有點類似於在操作PS,我們只需要設置關鍵幀,滑鼠點來點去就可以了,Blend會自動幫我們生成我們想要的動畫效果. 第一步:要創建一個空的WPF項目 第二步:右鍵我們的項目,在最下方有一個,在B ...
  • Prism:框架介紹與安裝 什麼是Prism? Prism是一個用於在 WPF、Xamarin Form、Uno 平臺和 WinUI 中構建鬆散耦合、可維護和可測試的 XAML 應用程式框架 Github https://github.com/PrismLibrary/Prism NuGet htt ...
  • 在WPF中,屏幕上的所有內容,都是通過畫筆(Brush)畫上去的。如按鈕的背景色,邊框,文本框的前景和形狀填充。藉助畫筆,可以繪製頁面上的所有UI對象。不同畫筆具有不同類型的輸出( 如:某些畫筆使用純色繪製區域,其他畫筆使用漸變、圖案、圖像或繪圖)。 ...
  • 前言 嗨,大家好!推薦一個基於 .NET 8 的高併發微服務電商系統,涵蓋了商品、訂單、會員、服務、財務等50多種實用功能。 項目不僅使用了 .NET 8 的最新特性,還集成了AutoFac、DotLiquid、HangFire、Nlog、Jwt、LayUIAdmin、SqlSugar、MySQL、 ...
  • 本文主要介紹攝像頭(相機)如何採集數據,用於類似攝像頭本地顯示軟體,以及流媒體數據傳輸場景如傳屏、視訊會議等。 攝像頭採集有多種方案,如AForge.NET、WPFMediaKit、OpenCvSharp、EmguCv、DirectShow.NET、MediaCaptre(UWP),網上一些文章以及 ...
  • 前言 Seal-Report 是一款.NET 開源報表工具,擁有 1.4K Star。它提供了一個完整的框架,使用 C# 編寫,最新的版本採用的是 .NET 8.0 。 它能夠高效地從各種資料庫或 NoSQL 數據源生成日常報表,並支持執行複雜的報表任務。 其簡單易用的安裝過程和直觀的設計界面,我們 ...
  • 背景需求: 系統需要對接到XXX官方的API,但因此官方對接以及管理都十分嚴格。而本人部門的系統中包含諸多子系統,系統間為了穩定,程式間多數固定Token+特殊驗證進行調用,且後期還要提供給其他兄弟部門系統共同調用。 原則上:每套系統都必須單獨接入到官方,但官方的接入複雜,還要官方指定機構認證的證書 ...
  • 本文介紹下電腦設備關機的情況下如何通過網路喚醒設備,之前電源S狀態 電腦Power電源狀態- 唐宋元明清2188 - 博客園 (cnblogs.com) 有介紹過遠程喚醒設備,後面這倆天瞭解多了點所以單獨加個隨筆 設備關機的情況下,使用網路喚醒的前提條件: 1. 被喚醒設備需要支持這WakeOnL ...
  • 前言 大家好,推薦一個.NET 8.0 為核心,結合前端 Vue 框架,實現了前後端完全分離的設計理念。它不僅提供了強大的基礎功能支持,如許可權管理、代碼生成器等,還通過採用主流技術和最佳實踐,顯著降低了開發難度,加快了項目交付速度。 如果你需要一個高效的開發解決方案,本框架能幫助大家輕鬆應對挑戰,實 ...