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

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

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

1 問題描述
查看下面這段代碼:

復制代碼 代碼如下:

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)的重復代碼。

2 解決方案
如何消除重復?使用委托。

•定義委托

復制代碼 代碼如下:

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

•模板方法

復制代碼 代碼如下:

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

•客戶端代碼

復制代碼 代碼如下:

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開始支持lambda表達式

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開始支持lambda表達式
  }

  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.減少了子類數(shù)量,模板方法中,拓展一套算法就需要一個子類。
2.模板將算法隱藏,委托交由客戶代碼去選擇。

相關文章

  • 聊聊Unity 自定義日志保存的問題

    聊聊Unity 自定義日志保存的問題

    這篇文章主要介紹了Unity 自定義日志保存的問題,之前unity5.x在代碼中寫了debug.log打包之后在當前程序文件夾下會有個對應的"outlog.txt",后來進行了更改,今天通過代碼給大家介紹了Unity日志保存的問題,需要的朋友一起看看吧
    2021-05-05
  • 詳解WCF服務中的svc文件

    詳解WCF服務中的svc文件

    本文詳細講解了WCF服務中的svc文件,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • C#和JavaScript實現(xiàn)交互的方法

    C#和JavaScript實現(xiàn)交互的方法

    最近做一個小項目不可避免的需要前端腳本與后臺進行交互。由于是在asp.net中實現(xiàn),故問題演化成asp.net中jiavascript與后臺c#如何進行交互。
    2015-05-05
  • Unity2021發(fā)布WebGL與網(wǎng)頁交互問題的解決

    Unity2021發(fā)布WebGL與網(wǎng)頁交互問題的解決

    本文主要介紹了Unity2021發(fā)布WebGL與網(wǎng)頁交互問題的解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • C#請求http向網(wǎng)頁發(fā)送接收數(shù)據(jù)的方法

    C#請求http向網(wǎng)頁發(fā)送接收數(shù)據(jù)的方法

    這篇文章主要為大家詳細介紹了C#請求http向網(wǎng)頁發(fā)送數(shù)據(jù)、網(wǎng)頁接收的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • C#零基礎開發(fā)中最重要的概念總結(jié)

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

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

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

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

    Unity實現(xiàn)粒子光效導出成png序列幀

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

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

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

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

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

最新評論