Csharp/C#教程:C#用Lambda和委托实现模板方法分享

1问题描述
查看下面这段代码:

代码如下:
int[]a=[1,2,3];

for(inti=0;i<a.length;i++)
 {
   a[i]=a[i]*2;
 }

for(inti=0;i<a.length;i++)
 {
   Console.WriteLine(a[i]);
 }

很明显,上述代码中存在for循环的重复代码。

2解决方案
如何消除重复?使用委托。

•定义委托
代码如下:
delegateintmapfun(intx);//以替换上述代码中不同的部分

•模板方法
代码如下:
//只负责遍历
voidmap(mapfunfn,int[]a)
{
 for(inti=0;i<a.Length;++i)
   {
     a[i]=fn(a[i]);
   }
}

•客户端代码
代码如下:
int[]a={1,2,3};
map(delegate(intx){returnx*2;},a); //.Net2.0支持委托匿名方法
map(x=>{Console.WriteLine(x);returnx;},a);//.Net3.0开始支持lambda表达式

3完整代码示例
代码如下:
classProgram
{
 staticvoidMain(string[]args)
 {
   int[]a={1,2,3};
   map(delegate(intx){returnx*2;},a); //.Net2.0支持委托匿名方法
   map(x=>{Console.WriteLine(x);returnx;},a);//.Net3.0开始支持lambda表达式
 }

 delegateintmapfun(intx);
 staticvoidmap(mapfunfn,int[]a)
 {
   for(inti=0;i<a.Length;++i)
     {
       a[i]=fn(a[i]);
     }
 }
}

4与传统模板方法的比较
1.减少了子类数量,模板方法中,拓展一套算法就需要一个子类。
2.模板将算法隐藏,委托交由客户代码去选择。

您可能感兴趣的文章:C#基础之Lambda表达式用法实例教程C#中使用Lambda表达式自定义比较器实现两个列表合并实例C#Lambda表达式用途深入理解C#中方法的直接调用、反射调用与Lambda表达式调用对比初步认识C#中的Lambda表达式和匿名方法C#3.0中Lambda表达式详解C#中如何利用lambda实现委托事件的挂接理解C#中的Lambda表达式C#Lambda知识回顾利用lambda表达式树优化反射详解

标签: 方法 模板 mb

显示内存状态示例分享

C#修改MAC地址类的实例

上述就是C#学习教程:C#用Lambda和委托实现模板方法分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/904467.html

(0)
上一篇 2021年10月21日
下一篇 2021年10月21日

精彩推荐