C#中Action的用法

Action?是 C# 中委托的一種,用于封裝無返回值的方法。它引用的方法不能有返回值,但可以有零個或多個參數。相比delegate委托,Action 委托的優點是不必顯式定義封裝無參數過程的委托,使代碼更加簡潔和易讀。

1、delegate-委托

先簡單介紹一下關鍵字delegate

(1)delegate用來定義一種變量類型,特別的地方在于這種類型只能指向方法。兩個關鍵點:①輸入參數(個數、類型、順序);②返回值。

(2)delegate的例子

using System;namespace DelegateDemo
{delegate void MyDelegate(string s);//1、委托類型的定義:指向輸入參數是字符串且無返回值的方法class Program{static void Method(string s)//注意:委托引用的函數與委托類型的定義必須是一樣的{Console.WriteLine($"hello {s}");}static void Main(string[] args){MyDelegate myDele = new MyDelegate(Method); //2、委托的實例化myDele("myDele"); //3、委托的兩種調用方式myDele.Invoke("myDele.Invoke");Console.Read();}}
}

輸出

hello myDele
hello myDele.Invoke

(3)多播委托

delegate的妙用-多播委托,此時會按順序依次調用引用的所有方法,下面是多播委托的例子

using System;namespace DelegateDemo
{delegate void MyDelegate(string s);class Program{static void Method1(string s){Console.WriteLine($"Method1 hello {s}");}static void Method2(string s){Console.WriteLine($"Method2 hello {s}");}static void Method3(string s) =>//"=>"用于定義只有一句的方法Console.WriteLine($"Method3 hello {s}");static void Main(string[] args){MyDelegate myDele = new MyDelegate(Method1); myDele += Method2;//多播委托-增加引用myDele("myDele"); Console.WriteLine($"-------1");myDele += Method2;//多播委托-增加引用myDele("myDele");Console.WriteLine($"-------2");myDele += Method3;myDele("myDele");Console.WriteLine($"-------3");myDele -= Method2;//多播委托-刪除引用myDele("myDele");Console.Read();}}
}

輸出

Method1 hello myDele
Method2 hello myDele
-------1
Method1 hello myDele
Method2 hello myDele
Method2 hello myDele
-------2
Method1 hello myDele
Method2 hello myDele
Method2 hello myDele
Method3 hello myDele
-------3
Method1 hello myDele
Method2 hello myDele
Method3 hello myDele

下面通過兩個例子來說明Action委托的用法。

2、Action無參數的例子

using System;namespace ActionDemo1
{delegate void MyDelegate();            //1、委托類型   class Program{static void Method(){Console.WriteLine("Method 被調用" );}static void Main(string[] args){MyDelegate myDel = new MyDelegate(Method);//2、委托實例化myDel();//3、委托對象的調用Action showActioMethod = Method;showActioMethod();Console.ReadLine();}}
}

輸出

Method 被調用
Method 被調用

3、Action有參數的例子

using System;namespace ActionDemo2
{delegate void MyDelegate(string s);          //1、定義委托類型    class Program{static void Method(string s) {Console.WriteLine("Method 被調用,輸入:" + s);}static void Main(string[] args){MyDelegate myDel = new MyDelegate(Method);//2、委托實例化myDel("delegate委托");//3、委托對象的調用Action<string> showActioMethod = Method;showActioMethod("Action委托");Console.ReadLine();}}
}

?輸出

Method 被調用,輸入:delegate委托
Method 被調用,輸入:Action委托

可以看到,使用 delegate 進行委托操作通常需要三步,而使用 Action 進行委托時,只需兩步即可完成。尤其是無需提前定義委托類型這一點,非常關鍵。這樣,在閱讀代碼時,我們不需要跳轉到委托類型的定義部分,從而提升了代碼的可讀性和簡潔性。

參考

C#內置泛型委托:Action委托 - .NET開發菜鳥 - 博客園

Action 委托 (System) | Microsoft Learn

叩響C#之門 (16.2 多播委托)(豆瓣)

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

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

相關文章

計算機視覺與深度學習 | matlab實現EMD-CNN-LSTM時間序列預測(完整源碼、數據、公式)

EMD-CNN-LSTM 一、完整代碼實現二、核心公式說明1. **經驗模態分解(EMD)**2. **1D卷積運算**3. **LSTM門控機制**4. **損失函數**三、代碼結構解析四、關鍵參數說明五、性能優化建議六、典型輸出示例以下是用MATLAB實現EMD-CNN-LSTM時間序列預測的完整方案,包含數據生成、經…

mybatis-plus實操

如何生成完全看項目&#xff0c;有的人是用管理系統生成&#xff0c;還有其他人可能是.....。博主這里是用插件生成 我是插件的話&#xff0c;先在ide連接上數據源&#xff0c;然后對表右鍵&#xff0c;直接來到下面這個步驟&#xff0c; 第一次是新增6個文件&#xff0c;我們…

Mergekit——任務向量合并算法Ties解析

Mergekit——高頻合并算法 TIES解析 Ties背景Ties 核心思想具體流程總結 mergekit項目地址 Mergekit提供模型合并方法可以概況為三大類&#xff1a;基本線性加權、基于球面插值、基于任務向量&#xff0c;今天我們來刷下基于任務向量的ties合并方法&#xff0c;熟悉原理和代碼。…

YOLOv8 在單片機上部署的缺點和應對方案

YOLOv8 在單片機上部署的主要挑戰與缺陷 將 YOLOv8 部署到單片機上確實面臨諸多技術挑戰&#xff0c;主要源于單片機有限的計算資源與 YOLOv8 模型的高復雜度之間的矛盾。以下是具體的缺陷和限制&#xff1a; 1. 計算資源嚴重不足 算力限制&#xff1a;典型單片機&#xff0…

搭建一個永久免費的博客

搭建永久免費的博客&#xff08;1&#xff09;基本介紹 HugoStackGitHub GitHub GitHub GitHub Build and ship software on a single, collaborative platform GitHub 下載安裝git Git - Downloads Edge插件authenticator 2fa client Settings->Password and auth…

基于SpringBoot的小型民營加油站管理系統

作者&#xff1a;計算機學姐 開發技術&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源碼”。 專欄推薦&#xff1a;前后端分離項目源碼、SpringBoot項目源碼、Vue項目源碼、SSM項目源碼、微信小程序源碼 精品專欄&#xff1a;…

推薦一個Winform開源的UI工具包

從零學習構建一個完整的系統 推薦一個開源、免費的適合.NET WinForms 控件的套件。 項目簡介 Krypton是一套開源的.Net組件&#xff0c;用于快速構建具有豐富UI交互的WinForms應用程序。 豐富的UI控件&#xff0c;提供了48個基礎控件&#xff0c;如按鈕、文本框、標簽、下拉…

社交平臺推出IP關聯機制:增強用戶體驗與網絡安全的新舉措

社交平臺為我們提供與親朋好友保持聯系、分享生活點滴的便捷渠道&#xff0c;還成為了信息傳播、觀點交流的重要平臺。然而&#xff0c;隨著社交平臺的普及&#xff0c;網絡空間中的虛假信息、惡意行為等問題也日益凸顯。為了應對這些挑戰&#xff0c;許多社交平臺相繼推出IP關…

系統架構設計(八):三層架構

什么是三層架構&#xff08;Three-Tier Architecture&#xff09; 三層架構是將系統分為三大邏輯層&#xff1a;表示層&#xff08;Presentation&#xff09;、業務邏輯層&#xff08;Business Logic&#xff09;、數據訪問層&#xff08;Data Access&#xff09;&#xff0c;…

C語法備注01

&#xff08;1&#xff09;char 字符類 char 既可以是 整數 類型&#xff0c;也可以是 字符 類型。z字符 類型可以轉化為對應的ASC2值。 int main(){char c;char e;c 1;char d 1;e A;printf("c %d\n", c);printf("d %d\n", d);printf("e %d\n…

CVE-2015-2183 Zeuscart SQL注入漏洞

CVE-2015-2183 Zeuscart SQL注入漏洞 主頁 訪問/admin/進行登錄 訪問&#xff1a;http://192.168.1.3/admin/?doeditcurrency&cid1 單引號測試&#xff0c;發現頁面發生變化&#xff0c;進一步測試 order by 5 &#xff0c;頁面正常&#xff0c;order by 6時頁面發生變…

Go 語言即時通訊系統開發日志-日志day2-5:架構設計與日志封裝

Go語言即時通訊系統開發日志day2 計劃&#xff1a;學習go中MySQL&#xff0c;Redis的使用&#xff0c;使用MySQL和Redis完成一個單聊demo。 總結&#xff1a;現在每天下午用來開發這個項目&#xff0c;如果有課的話可能學習時間只有3-4個小時&#xff0c;再加上今天的學習效率不…

對盒模型的理解

對CSS盒模型的深入理解 CSS盒模型是網頁布局的基礎概念&#xff0c;它描述了HTML元素在頁面中所占的空間以及如何計算這些空間。以下是關于盒模型的全面解析&#xff1a; 1. 盒模型的基本組成 每個HTML元素都被視為一個矩形的盒子&#xff0c;這個盒子由內到外由四部分組成&…

RV1126多線程獲取SMARTP的GOP模式數據和普通GOP模式數據

通過代碼的方式同時獲取SMARTP模式的VENC碼流數據和普通GOP模式的VENC碼流數據&#xff0c;并進行對比畫質。 一.RV1126 VI采集攝像頭數據并同時編碼SMARTP模式和普通GOP模式的編碼碼流流程 RV1126利用多線程同時獲取普通GOP的VENC碼流數據和SMARTP的碼流數據一般如上圖&#…

在Ubuntu使用 Ansible 配置 Azure 資源的動態清單

使用 Ansible 配置 Azure 資源的動態清單 簡介1.安裝pipx2.通過 pipx 安裝 Ansible3.安裝azure.azcollection4.安裝集合所需的依賴項5.生成動態庫存 簡介 在主機變化不定的云環境中&#xff0c;Ansible 的動態清單功能可以消除維護靜態清單文件的負擔 本教程將帶你使用 Azure…

車載診斷架構 ---車載總線對于功能尋址的處理策略

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 鈍感力的“鈍”,不是木訥、遲鈍,而是直面困境的韌勁和耐力,是面對外界噪音的通透淡然。 生活中有兩種人,一種人格外在意別人的眼光;另一種人無論…

Github 2025-05-16 Java開源項目日報 Top9

根據Github Trendings的統計,今日(2025-05-16統計)共有9個項目上榜。根據開發語言中項目的數量,匯總情況如下: 開發語言項目數量Java項目9Netty:異步事件驅動的網絡應用程序框架 創建周期:5043 天開發語言:Java協議類型:Apache License 2.0Star數量:33219 個Fork數量:…

大語言模型(LLM)如何通過“思考時間”(即推理時的計算資源)提升推理能力

大語言模型(LLM)如何通過“思考時間”(即推理時的計算資源)提升推理能力 核心圍繞人類思維機制、模型架構改進、訓練方法優化等展開 一、人類思維的啟發:快思考與慢思考 類比心理學: 人類思維分兩種模式: 快思考(系統1):直覺驅動,快速但易出錯(如估算簡單問題)。…

【ubuntu24.04】pycharm 死機結束進程

windows 遠程pycharm到ubuntu執行程序 pycharm 在調試過程中&#xff0c;內存耗盡&#xff0c;然后死機了 pycharm 進程 (base) rootk8s-master-pfsrv:/home/zhangbin/下載# ps -ef | grep pycharm root 121245 3230568 0 5月14 pts/8 00:00:00 /bin/bash --rcfile …

從虛擬仿真到行業實訓再到具身智能--華清遠見嵌入式物聯網人工智能全鏈路教學方案

2025年5月23-25日&#xff0c;第63屆中國高等教育博覽會&#xff08;高博會&#xff09;將在長春中鐵東北亞國際博覽中心舉辦。作為國內高等教育領域規模大、影響力廣的綜合性展會&#xff0c;高博會始終聚焦教育科技前沿&#xff0c;吸引全國高校管理者、一線教師、教育科技企…