C#用Lambda和委托實(shí)現(xiàn)模板方法
1 問(wèn)題描述
查看下面這段代碼:
int[] a = [1,2,3];
for (int i =0; i<a.length; i++)
{
a[i] = a[i] * 2;
}
for (int i =0; i<a.length; i++)
{
Console.WriteLine(a[i]);
}
很明顯,上述代碼中存在for循環(huán)的重復(fù)代碼。
2 解決方案
如何消除重復(fù)?使用委托。
•定義委托
delegate int mapfun(int x);//以替換上述代碼中不同的部分
•模板方法
//只負(fù)責(zé)遍歷
void map(mapfun fn, int[] a)
{
for (int i = 0; i < a.Length; ++i)
{
a[i] = fn(a[i]);
}
}
•客戶(hù)端代碼
int[] a = {1, 2, 3};
map(delegate(int x) { return x * 2; }, a); //.Net 2.0支持委托匿名方法
map(x => { Console.WriteLine(x); return x; }, a); //.Net 3.0開(kāi)始支持lambda表達(dá)式
3 完整代碼示例
class Program
{
static void Main(string[] args)
{
int[] a = {1, 2, 3};
map(delegate(int x) { return x * 2; }, a); //.Net 2.0支持委托匿名方法
map(x => { Console.WriteLine(x); return x; }, a); //.Net 3.0開(kāi)始支持lambda表達(dá)式
}
delegate int mapfun(int x);
static void map(mapfun fn, int[] a)
{
for (int i = 0; i < a.Length; ++i)
{
a[i] = fn(a[i]);
}
}
}
4 與傳統(tǒng)模板方法的比較
1.減少了子類(lèi)數(shù)量,模板方法中,拓展一套算法就需要一個(gè)子類(lèi)。
2.模板將算法隱藏,委托交由客戶(hù)代碼去選擇。
- C#基礎(chǔ)之Lambda表達(dá)式用法實(shí)例教程
- C#中使用Lambda表達(dá)式自定義比較器實(shí)現(xiàn)兩個(gè)列表合并實(shí)例
- C# Lambda表達(dá)式用途深入理解
- C#中方法的直接調(diào)用、反射調(diào)用與Lambda表達(dá)式調(diào)用對(duì)比
- 初步認(rèn)識(shí)C#中的Lambda表達(dá)式和匿名方法
- C#3.0中Lambda表達(dá)式詳解
- C# 中如何利用lambda實(shí)現(xiàn)委托事件的掛接
- 理解C#中的Lambda表達(dá)式
- C# Lambda 知識(shí)回顧
- 利用lambda表達(dá)式樹(shù)優(yōu)化反射詳解
相關(guān)文章
C#和JavaScript實(shí)現(xiàn)交互的方法
最近做一個(gè)小項(xiàng)目不可避免的需要前端腳本與后臺(tái)進(jìn)行交互。由于是在asp.net中實(shí)現(xiàn),故問(wèn)題演化成asp.net中jiavascript與后臺(tái)c#如何進(jìn)行交互。2015-05-05Unity2021發(fā)布WebGL與網(wǎng)頁(yè)交互問(wèn)題的解決
本文主要介紹了Unity2021發(fā)布WebGL與網(wǎng)頁(yè)交互問(wèn)題的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05C#請(qǐng)求http向網(wǎng)頁(yè)發(fā)送接收數(shù)據(jù)的方法
這篇文章主要為大家詳細(xì)介紹了C#請(qǐng)求http向網(wǎng)頁(yè)發(fā)送數(shù)據(jù)、網(wǎng)頁(yè)接收的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07C#零基礎(chǔ)開(kāi)發(fā)中最重要的概念總結(jié)
這篇文章主要為大家詳細(xì)介紹了C#零基礎(chǔ)開(kāi)發(fā)中最重要的一些概念,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,需要的可以參考一下2023-02-02Unity實(shí)現(xiàn)粒子光效導(dǎo)出成png序列幀
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)粒子光效導(dǎo)出成png序列幀,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03