這兩個用法我之前就很想搞懂,
但因為不知道怎麼去Google這關鍵字所以一直懸在心上
(<--實力差又沒在買書看的人)
剛好曹祖聖老師來公司上課時有舉到範例,解了我心懸一念
故在這邊簡略示意一般
一般我們可能會做個函式如:
然後去針對abc2()去呼叫它(static別管它),一般的呼叫我們應該都知道了,只是我們也可以用Func的方式去呼叫它,如:
簡略來說就這樣囉,謝謝有來看的人觀賞~~~~
PS:有無發現,其實內圈的自定函式,是跑delegate的,只是剛才我都省略掉而已哦。
故在這邊簡略示意一般
一般我們可能會做個函式如:
01 public static string abc2(int a,int b) 02 { 03 return (a+b).ToString(); 04 }
01 Func<int, int, string> dd = new Func<int, int, string>(abc2);
我們可以簡化它
01 Func<int, int, string> dd = abc2;
然後使用Invoke()或其它去執行它
01 dd.Invoke(1, 2)
但我們有時可能不希望函式寫一大堆,或是許多原因等,也可以用Func去改寫abc2:
01 Func<int, int, string> dd2 = new Func<int, int, string>( 02 (a1,a2) => 03 { 04 return (a1 + a2).ToString(); 05 } 06 );
一樣用Invoke()或其它去執行它
01 02 Console.WriteLine(dd.Invoke(1, 2)); 03 Console.WriteLine(dd.Invoke(1, 3)); 04 Console.WriteLine(dd.Invoke(1, 4)); 05 Console.WriteLine(dd.Invoke(1, 5));
有時依需求,因為這程式段落已經被拉到內層了使用了,所以甚至可以把a1 a2給省略或整合掉
01 int O1, O2; 02 O1 = 1; O2 = 2; 03 Func<string> dd2 = new Func<string>( 04 () => { 05 return (O1 + O2).ToString(); 06 } 07 ); 08 Console.WriteLine(dd2.Invoke());
嗯?怎麼沒講到Action?
其實Action一樣用法
只是Action對應的是void類型
而Func對應的是有return的類
看在你願意把畫面拉下來的份上,我還是貼個CODE好了
01 Action<int> fff = def; 02 03 Action<int> dfqefqf = new Action<int>( 04 delegate(int a1) 05 { 06 } 07 ); 08 09 10 Action<int> dfqefqf2 = new Action<int>( 11 (no) => 12 { 13 //code 14 } 15 );
以上~88
沒有留言:
張貼留言