<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Action和Func泛型委託實際上就是一個.NET Framework預定義的委託,3.5引入的特性。基本涵蓋了所有常用的委託,所以一般不用使用者重新宣告。Action系列泛型委託,是沒有返回引數的委託,最多可以有16引數,也可以沒有引數。
Func系列的委託是有返回值的委託,最多可以有16個引數;元組是C# 4.0引入的一個新特性,編寫的時候需要基於.NET Framework 4.0或者更高版本。元組使用泛型來簡化一個類的定義.提供用於創造元組物件的靜態方法。最多可以提供建立新的 8 元組,即八元組。
委託其實就是把方法當作引數來呼叫,Action就是其中之一,Action 作為引數不能有返回值,引數可以是任意型別,也可以不傳遞引數。
呼叫某個類中的Action
using System; namespace Test1 { internal class Program { static void Main(string[] args) { Test1 test1 = new Test1(); test1.myAction(); Console.ReadKey(); } } public class Test1 { public Action myAction = null; private void sayHi() { Console.WriteLine("fuck you!"); } public Test1() { myAction = sayHi; } } }
執行:
這種方式用的比較少,Action常用的方式通常是用來作為和回撥
執行一系列的操作後,再執行回撥,也是比較推薦的使用方式。
using System; namespace Test1 { internal class Program { static void Main(string[] args) { Test1 test1 = new Test1(); test1.Calculation(1, 2, ReceiveResult); Console.ReadKey(); } private static void ReceiveResult(int res) { Console.WriteLine("結算的結果是:" + res); } } public class Test1 { public void Calculation(int x, int y, Action<int> call) { if (call != null) { call(x + y); } } } }
執行:
將方法換成 Lambda 表示式,效果一樣的,關於Lambda的使用方法,可以參考:點選跳轉
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Test1 { internal class Program { static void Main(string[] args) { Test1 test1 = new Test1(); test1.Calculation(1, 2, (int res) => { Console.WriteLine("結算的結果是:" + res); }); Console.ReadKey(); } } public class Test1 { public void Calculation(int x, int y, Action<int> call) { if (call != null) { call(x + y); } } } }
上面使用Action的案例中,執行回撥後,都沒有返回值,這是因為Action並不能接收返回值,如果想執行回撥,又有返回值怎麼辦呢,Func就是用來解決這個問題的。
Func 必須有一個返回值,否則會報錯,如下圖:
返回值通常是在引數的最後一個,參考例1,Func<int, float, string> MyFunc = null 這個委託中,string 就是返回值,傳遞引數的時候,也只能傳遞兩個引數,如果再多寫一個引數就會報錯,如下圖:
基本的用法,func賦值,執行委託,並接收返回值
using System; namespace Test1 { internal class Program { static void Main(string[] args) { Test1 test1 = new Test1(); string userName = test1.MyFunc(15, 180.2f); Console.WriteLine(userName); Console.ReadKey(); } } public class Test1 { public Func<int, float, string> MyFunc = null; private string GetUserName(int age, float height) { if (age == 15 && height == 180.2f) { return "張三"; } return null; } public Test1() { MyFunc = GetUserName; } } }
執行:
把func作為方法的引數傳遞,並執行回撥
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Test1 { internal class Program { static void Main(string[] args) { Test1 test1 = new Test1(); Func<string> func = () => { string name = "張三"; string feel = "精力非常旺盛"; string msg = name + feel; return msg; }; test1.Calculation(10, 12, func); Console.ReadKey(); } } public class Test1 { public void Calculation(int x,int y, Func<string> sayFunc) { if(sayFunc != null) { int age = x + y; string msg = string.Format("年齡是:{0},對年齡的感受:{1}", age, sayFunc()); Console.WriteLine(msg); } } } }
執行:
上面程式碼只是作為一個參考,讀者可以根據自己的需求做一個改進。
到此這篇關於淺談C#中Action和Func回撥的常用方式的文章就介紹到這了,更多相關C# Action和Func回撥內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45