欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#用Lambda和委托實(shí)現(xiàn)模板方法

 更新時(shí)間:2013年03月18日 20:21:04   作者:  
C#用Lambda和委托實(shí)現(xiàn)模板方法,需要的朋友可以參考一下

1 問(wèn)題描述
查看下面這段代碼:

復(fù)制代碼 代碼如下:

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ù)?使用委托。

•定義委托

復(fù)制代碼 代碼如下:

delegate int mapfun(int x);//以替換上述代碼中不同的部分

•模板方法

復(fù)制代碼 代碼如下:

//只負(fù)責(zé)遍歷
void map(mapfun fn, int[] a)
{
  for (int i = 0; i < a.Length; ++i)
    {
      a[i] = fn(a[i]);
    }
}

•客戶(hù)端代碼

復(fù)制代碼 代碼如下:

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 完整代碼示例

復(fù)制代碼 代碼如下:

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ù)代碼去選擇。

相關(guān)文章

  • 聊聊Unity 自定義日志保存的問(wèn)題

    聊聊Unity 自定義日志保存的問(wèn)題

    這篇文章主要介紹了Unity 自定義日志保存的問(wèn)題,之前unity5.x在代碼中寫(xiě)了debug.log打包之后在當(dāng)前程序文件夾下會(huì)有個(gè)對(duì)應(yīng)的"outlog.txt",后來(lái)進(jìn)行了更改,今天通過(guò)代碼給大家介紹了Unity日志保存的問(wèn)題,需要的朋友一起看看吧
    2021-05-05
  • 詳解WCF服務(wù)中的svc文件

    詳解WCF服務(wù)中的svc文件

    本文詳細(xì)講解了WCF服務(wù)中的svc文件,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • C#和JavaScript實(shí)現(xià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-05
  • Unity2021發(fā)布WebGL與網(wǎng)頁(yè)交互問(wèn)題的解決

    Unity2021發(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-05
  • C#請(qǐng)求http向網(wǎng)頁(yè)發(fā)送接收數(shù)據(jù)的方法

    C#請(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-07
  • C#零基礎(chǔ)開(kāi)發(fā)中最重要的概念總結(jié)

    C#零基礎(chǔ)開(kāi)發(fā)中最重要的概念總結(jié)

    這篇文章主要為大家詳細(xì)介紹了C#零基礎(chǔ)開(kāi)發(fā)中最重要的一些概念,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,需要的可以參考一下
    2023-02-02
  • C#實(shí)現(xiàn)MP3播放器功能的示例代碼

    C#實(shí)現(xiàn)MP3播放器功能的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)MP3播放器功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以了解一下
    2022-12-12
  • Unity實(shí)現(xiàn)粒子光效導(dǎo)出成png序列幀

    Unity實(shí)現(xiàn)粒子光效導(dǎo)出成png序列幀

    這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)粒子光效導(dǎo)出成png序列幀,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • c#中如何獲取指定字符前的字符串

    c#中如何獲取指定字符前的字符串

    這篇文章主要介紹了c#中如何獲取指定字符前的字符串問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • C#實(shí)現(xiàn)線段樹(shù)的示例代碼

    C#實(shí)現(xiàn)線段樹(shù)的示例代碼

    線段樹(shù)是一種常用來(lái)維護(hù)區(qū)間信息的數(shù)據(jù)結(jié)構(gòu),本文主要介紹了C#實(shí)現(xiàn)線段樹(shù)的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11

最新評(píng)論