国产探花免费观看_亚洲丰满少妇自慰呻吟_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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 龙南县| 建昌县| 武汉市| 西吉县| 五原县| 澄迈县| 三明市| 江源县| 陵水| 安化县| 和平区| 古丈县| 应用必备| 崇文区| 卓资县| 常宁市| 当雄县| 武强县| 淮北市| 临湘市| 灵山县| 天水市| 兴隆县| 同仁县| 九寨沟县| 和林格尔县| 什邡市| 巴中市| 博罗县| 嵊泗县| 田阳县| 虹口区| 乌审旗| 文山县| 黄石市| 和田市| 武安市| 新巴尔虎左旗| 昭苏县| 茶陵县| 沿河|