国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C#中Action和Func的使用

2019-11-17 02:28:30
字體:
來源:轉載
供稿:網友

C#中Action和Func的使用

在日常使用delegate時,我們通常需要顯示聲明一個名為XXX的委托,而在使用Action委托時,不必顯示定義一個封裝無參數過程的委托。

比如正常使用delegate:

 1 using System; 2  3 namespace MT 4 { 5     public delegate void ShowValue();//在這里顯示聲明一個委托 6  7     public class Test 8     { 9         //在這里有一個Test類,類中有一個void的方法,作用是輸出一個字符串10         PRivate string instanceName;11         public Test(string name)12         {13             this.instanceName = name;14         }15         public void DisplayToConsole()16         {17             Console.WriteLine(this.instanceName);18         }19     }20 21     public class Program22     {23         //在Main函數里使用委托去調用這個方法24         static void Main(string[] args)25         {26             Test name = new Test("Sirius");27             ShowValue method = name.DisplayToConsole;28             method();29             Console.ReadKey();30         }31     }32 }

Action就是這么個姿勢:

1 static void Main(string[] args)2 {3     Test name = new Test("Sirius");4     Action method = name.DisplayToConsole;5     method();6     Console.ReadKey();7 }

當然,Action也可以有簽名模板,Action<T>。

public void DisplayToConsole(string name){      Console.WriteLine(name);}
Action<string> method2 = name.DisplayToConsole;method2("123");Console.ReadKey();

說到Func,其實跟Action的區別就是,Func代理的方法必須有返回值,因為Func的重載模式是Func<T1,T2....TResult>,T幾代表代理的方法的模板,也就是可以傳入的參數,TResult就是代理方法的返回值。

比如,我們把上面的DisplayToConsole方法稍作修改,改為DisplayForFunc:

1         public void DisplayForFunc(string name)2         {3             Console.WriteLine(name);4         }

這個時候使用Func委托時不行的

Func<string, object> f = t.DisplayForFunc;

會被告知返回類型錯誤,Func所適應的代理則應該是具有返回值類型的,我們再修改一下方法,讓它返回一個無意義的bool值:

1         public bool DisplayForFunc(string name)2         {3             Console.WriteLine(name);4             return true;5         }
1         static void Main(string[] args)2         {3             Test t = new Test("Sirius");4             Func<string, bool> f = t.DisplayForFunc;5             f("123");6             Console.ReadKey();            7         }

這樣就是可以的啦!

順便貼一張MSDN的牛逼圖,這是我第一次看MSDN看到想笑&hellip;…

代碼參考:https://msdn.microsoft.com/zh-cn/library/system.action(v=vs.110).aspx


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 萨嘎县| 岢岚县| 北碚区| 江油市| 南京市| 嘉义市| 新津县| 梁河县| 吉木萨尔县| 安平县| 延津县| 南郑县| 周口市| 伊通| 疏附县| 平遥县| 基隆市| 巴塘县| 彭泽县| 丰原市| 芦溪县| 长宁县| 吉林省| 镶黄旗| 娱乐| 西乌珠穆沁旗| 凉城县| 东乡| 九龙县| 绥德县| 许昌县| 博爱县| 丹东市| 镇赉县| 凤山市| 聊城市| 比如县| 宝兴县| 福清市| 保山市| 清涧县|