源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

C#用Lambda和委托实现模板方法

  • 时间:2020-11-06 23:06 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C#用Lambda和委托实现模板方法
1 问题描述 查看下面这段代码:
[u]复制代码[/u] 代码如下:
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循环的重复代码。 2 解决方案 如何消除重复?使用委托。 •定义委托
[u]复制代码[/u] 代码如下:
delegate int mapfun(int x);//以替换上述代码中不同的部分
•模板方法
[u]复制代码[/u] 代码如下:
//只负责遍历 void map(mapfun fn, int[] a) {   for (int i = 0; i < a.Length; ++i)     {       a[i] = fn(a[i]);     } }
•客户端代码
[u]复制代码[/u] 代码如下:
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 完整代码示例
[u]复制代码[/u] 代码如下:
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 与传统模板方法的比较 1.减少了子类数量,模板方法中,拓展一套算法就需要一个子类。 2.模板将算法隐藏,委托交由客户代码去选择。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部