手机
当前位置:查字典教程网 >编程开发 >C#教程 >C#用Lambda和委托实现模板方法
C#用Lambda和委托实现模板方法
摘要: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#用Lambda和委托实现模板方法】相关文章:

C#实现协同过滤算法的实例代码

C#图片压缩的实现方法

c#.net 常用函数和方法集

c#解压文件的实例方法

探讨:如何使用委托,匿名方法对集合进行万能排序

C# 中将数值型数据转换为字节数组的方法

在Winform和WPF中注册全局快捷键实现思路及代码

利用多线程句柄设置鼠标忙碌状态的实现方法

C#使用非托管代码直接修改字符串的方法

使用DateTime的ParseExact方法实现特殊日期时间的方法详解

精品推荐
分类导航