C#委托事件的區別

在C#中,委托(delegate)和事件(event)經常一起使用,但它們之間確實有一些基本的區別:

  1. 委托(Delegate):委托是一個引用類型,它可以引用一個或多個具有特定簽名的方法。簡單地說,你可以將其視為一個類型安全的函數指針。

  2. 事件(Event):事件基于委托來實現,但它添加了一層封裝,使得對象的其他部分不能直接調用或修改事件,除非是那些聲明了這個事件的類。事件通常用于在類之間通信,一個類可以發布一個事件,而其他類可以訂閱這個事件。

示例代碼

委托:

// 定義一個委托
public delegate void MyDelegate(string message);public class MyClass
{// 使用委托public MyDelegate MyAction;public void TriggerAction(){MyAction?.Invoke("Triggered action!");}
}public class Program
{public static void Main(){MyClass obj = new MyClass();obj.MyAction += DisplayMessage;obj.TriggerAction();}static void DisplayMessage(string message){Console.WriteLine(message);}
}

事件:

public delegate void MyEventHandler(string message);public class EventPublisher
{// 使用事件public event MyEventHandler MyEvent;public void RaiseEvent(){MyEvent?.Invoke("Event raised!");}
}public class Program
{public static void Main(){EventPublisher publisher = new EventPublisher();publisher.MyEvent += OnMyEventOccurred; // 訂閱事件publisher.RaiseEvent();}static void OnMyEventOccurred(string message){Console.WriteLine(message);}
}

注意:

  • 在委托的例子中,我們可以直接訪問和修改MyAction委托。
  • 在事件的例子中,我們不能直接訪問或修改MyEvent事件(例如,不能直接調用或設置為null),但我們可以使用+=訂閱事件和使用-=取消訂閱事件。

這樣,事件提供了更好的封裝和控制,使外部代碼不能直接調用或修改事件,除非是那些聲明了這個事件的類。

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

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

相關文章

[python] 安裝numpy+scipy+matlotlib+scikit-learn及問題解決

這篇文章主要講述Python如何安裝Numpy、Scipy、Matlotlib、Scikit-learn等庫的過程及遇到的問題解決方法。最近安裝這個真是一把淚啊,各種不兼容問題和報錯,希望文章對你有所幫助吧!你可能遇到的問題包括: ImportError: N…

高并發數據抓取實戰:使用HTTP爬蟲ip提升抓取速度

又到每天一期學習爬蟲的時間了,作為一名專業的爬蟲程序員,今天要跟你們分享一個超實用的技巧,就是利用HTTP爬蟲ip來提升高并發數據抓取的速度。聽起來有點高大上?別擔心,我會用通俗易懂的話來和你們說,讓你…

自定義組件引入使用單標簽還是雙標簽好

在許多前端框架和庫中,自定義組件可以使用單標簽或雙標簽進行引入和使用。讓我為您解釋一下這兩種方式的區別和使用場景。 單標簽(Self-closing Tag):使用單標簽來引入自定義組件意味著您在組件的使用中只需要一個標簽&#xff0…

自動切換HTTP爬蟲ip助力Python數據采集

在Python的爬蟲世界里,你是否也被網站的IP封鎖問題困擾過?別擔心,我來教你一個終極方案,讓你的爬蟲自動切換爬蟲ip,輕松應對各種封鎖和限制!快來跟我學,讓你的Python爬蟲如虎添翼! 首…

如何使用mysql命令行導出csv文件?

首先打開ssh,使用命令行登錄mysql mysql -uroot -p123456 其中-u后面的root是用戶名,-p后面的123456是密碼 ,替換成自己的賬戶和密碼即可 然后切換到自己需要操作的數據庫,例如test數據庫 use test 接下來執行語句來選擇要導…

服務器托管中1U是什么意思?

U的概念 U是一種表示服務器外部尺寸的單位,是unit的縮略語。 1U4.44514.445cm 2U4.44528.89cm 4U4.445*413.335cm 在托管服務器時,服務商經常說的“1U”是外形滿足EIA(美國電子工業協會)規格、厚度為4.445cm的產品,設…

uniapp-微信小程序篇

uniapp-微信小程序篇 一、創建項目(以Vue3TS 項目為示例) 可以通過命令行的方式創建也可以通過HBuilderX進行創建(通過HBuilderX創建的項目建議選擇最簡單的模板),個人建議使用命令行方式。 (1) 命令行方式: npx degit dcloudio…

ABAP 期初庫存批量導入 demo1

&--------------------------------------------------------------------- *& Report ZMMCP005 &--------------------------------------------------------------------- 作者: Liv完成日期:描述: 期初庫存導入需求簡要說明&…

uni-app 面容、指紋識別插件(uni-face-login)

面容、指紋識別插件(uni-face-login) 介紹 人臉指紋登錄授權,可以使用手機自帶的人臉、指紋進行生物識別,進而判斷是否機主本人,從而進行授權驗證,適配安卓、iOS、鴻蒙設備 猛戳這里去插件市場看看 使用 該插件支持鴻蒙、安卓…

UE4/5C++多線程插件制作(二十一、使用)

目錄 DemoPawn.h DemoPawn.cpp 會出現的bug 插件 相關的插件制作在上一節已經完成了。 具體的使用方式在第0章已經寫了,get之后去綁定即可。 而后筆者做了一個接口,具體的綁定方式也就在這個接口里面。 接下來最重要的是進行使用,對此我做了一個與藍圖相關的接口,里…

TypeScript教程(一)簡介與安裝

一、簡介 TypeScript 是 JavaScript 的一個超集,擴展了JavaScript的語法,因此現有的JavaScript可與TypeScript一起工作無需修改,支持 ECMAScript 6 標準(ES6 教程)。 語言特性: 1.類型批注和編譯時類型檢…

怎么學習AJAX相關技術? - 易智編譯EaseEditing

學習AJAX(Asynchronous JavaScript and XML)相關技術可以讓你實現網頁的異步數據交互,提升用戶體驗。以下是一些學習AJAX技術的步驟和資源: HTML、CSS和JavaScript基礎: 首先,確保你已經掌握了基本的HTML…

【Redis】Redis三種集群模式-主從、哨兵、集群各自架構的優點和缺點對比

文章目錄 前言1. 單機模式2. 主從架構3. 哨兵4. 集群模式總結 前言 如果Redis的讀寫請求量很大,那么單個實例很有可能承擔不了這么大的請求量,如何提高Redis的性能呢?你也許已經想到了,可以部署多個副本節點,業務采用…

Android系統-進程-Binder1-概述

目錄 引言: 一次拷貝 Binder一次通信過程 應用啟動中的binder交互 C/S模式: Binder COMMAND BWR數據結構: 引言: Android的binder是從openbinder發展過來的。包括了binder驅動,Native層,Java層。用…

光耦繼電器:實現電氣隔離的卓越選擇

光耦繼電器是一種常用的電子元件,用于實現電氣隔離和信號傳輸。在工業控制、自動化系統和電力電子等領域,光耦繼電器具有獨特的特點和優勢。本文將從可靠性、隔離性、響應速度和適應性等方面對光耦繼電器的特點進行概述。 光耦繼電器是一種典型的固態繼電…

Mysql內儲存JSON字符串,根據條件進行查詢(包含多層級復雜JSON查詢)

1.模糊查詢json類型字段 存儲的數據格式(字段名 people_json): {“name”: “zhangsan”, “age”: “13”, “gender”: “男”} 代碼如下(示例): select * from table_name where people_json->$.n…

部署工業物聯網可以選擇哪些通信方案?

部署工業物聯網有諸多意義,諸如提升生產效率,降低管理成本,保障生產品質穩定,應對長期從業勞動力變化趨勢等。針對不同行業、場景,工業物聯網需要選擇不同的通信方案,以達到成本和效益的最佳平衡。本篇就簡…

安全頭響應頭(三)?X-Content-Type-Options

一 X-Content-Type-Options響應頭 說明:先寫個框架,后續補充 思考:請求類型是 "style" 和 "script" 是什么意思? script標簽 style StyleSheet JavaScript MIME type 文件擴展和Content-Type的映射關系 場景: 一個…

Mybatis 源碼 ∞ :雜七雜八

文章目錄 一、前言二、TypeHandler三、KeyGenerator四、Plugin1 Interceptor2 org.apache.ibatis.plugin.Plugin3. 調用場景 五、Mybatis 嵌套映射 BUG1. 示例2. 原因3. 解決方案 六、discriminator 標簽七、其他1. RowBounds2. ResultHandler3. MapKey 一、前言 Mybatis 官網…

mysql主從復制搭建(一主一從)

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 前言MySQL復制過程分為三部: 一、準備工作二、配置>主庫Master三、配置>從庫SlaveSlave_IO_Running: YesSlave_SQL_Running: Yes 四、測試至此&am…