C#用Lambda和委托实现模板方法_C#教程-查字典教程网
C#用Lambda和委托实现模板方法
C#用Lambda和委托实现模板方法
发布时间:2016-12-28 来源:查字典编辑
摘要:1问题描述查看下面这段代码:复制代码代码如下:int[]a=[1,2,3];for(inti=0;i

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循环的重复代码。

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 与传统模板方法的比较

1.减少了子类数量,模板方法中,拓展一套算法就需要一个子类。

2.模板将算法隐藏,委托交由客户代码去选择。

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新C#教程学习
    热门C#教程学习
    编程开发子分类