.net中用Action等委托向外传递参数
???? 一般我們可以使用ref,out達(dá)到向外傳遞參數(shù)目的。 Action<T>是一個(gè)特殊的委托,除了常規(guī)應(yīng)用。我們還可以用它來實(shí)現(xiàn)簡單地向外傳遞參數(shù)。直接看下面的UnitTest代碼:
1: [TestMethod] 2: public void PassOutParametersUsingDelegate() 3: { 4: int i = 0; 5: string messgae = string.Empty; 6: int? addedNumber = 1; 7:? 8: //It is pass parameter by Action<T1,T2> 9: Foo1((a, b) => 10: { 11: i = a; 12: messgae = b; 13: }); 14:? 15: //It is pass parameter by Func<T1,T2,TResult> 16: Foo2((a, b) => 17: { 18: i = a; 19: messgae = b; 20: return addedNumber; 21: }); 22:? 23: Foo2((a, b) => 24: { 25: return a+100; 26: }); 27:? 28: Assert.AreEqual("i=15,message=fifteen", string.Format("i={0},message={1}", i, messgae)); 29:? 30:? 31: } 32:? 33: private void Foo1(Action<int, string> action) 34: { 35: int number = 15; 36: string msg = "fifteen"; 37:? 38: action(number, msg); 39: } 40:? 41: private void Foo2(Func<int, string, int?> func) 42: { 43: int number = 15; 44: string msg = "fifteen"; 45:? 46: int? tempInt = func(number, msg); 47: }
上面的代碼我們演示使用Action<T>, 有注意到我們把a(bǔ),b兩個(gè)值傳遞給方法外面的變量。同樣的,我們用Func<TResult>可以實(shí)現(xiàn)。為什么會有這樣的代碼產(chǎn)生呢?源于這樣的場景,有一個(gè)方法只有一個(gè)輸入?yún)?shù),返回void 。我們?yōu)榱瞬桓淖冊瓉磉@個(gè)方法參數(shù)簽名,增加新的子方法,使用Action<T>向外傳遞參數(shù)。然后再用原方法Wrap新的子方法。
??? 關(guān)于Action<T>還有很多精彩的運(yùn)用,Builder模式與Fluent接口。
??? 希望對您開發(fā)有幫助。
作者:Petter Liu
出處:http://www.cnblogs.com/wintersun/
本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。
該文章也同時(shí)發(fā)布在我的獨(dú)立博客中-Petter Liu Blog。
轉(zhuǎn)載于:https://www.cnblogs.com/lonelyxmas/p/3805250.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的.net中用Action等委托向外传递参数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaScript学习笔记——unde
- 下一篇: HTTPS Web配置举例