首页
技术库|站长工具|技术手册|字体库|知识点词汇表| 联系我们|
打开本页的html静态页面
 

主菜单

文章分类

.: .Net技术 .: .Net分析与设计 .: .net各个版本中的委托使用对比

  • 全文内容
  • 发表评论
  • 文章点评
  • 文章附件
  • Email文章
  • 打印文章

.net各个版本中的委托使用对比

点击次数:214 创建日期:11-11-2007 录入:cn-web.com 字体:[ ] 点评:


1.0中首先声明一个委托类型,再定义一个相同签名的方法,就可以用了。

 1class Test
 2{
 3    delegate double Calc(double x);
 4
 5    static void Main(string[] args)
 6    {
 7        double[] a = 0.00.51.0 };
 8        double[] results = Apply(a, new Calc(Square));
 9        foreach (double d in results)
10        {
11            Console.WriteLine(d);
12        }

13
14        Console.ReadLine();
15    }

16
17    public static double Square(double x)
18    {
19        return x * x;
20    }

21
22    static double[] Apply(double[] a, Calc f)
23    {
24        double[] result = new double[a.Length];
25        for (int i = 0; i < a.Length; i++) result[i] = f(a[i]);
26        return result;
27    }

28}
整个代码虽然比较繁琐,但确很明了。
自从2.0推出了匿名方法之后,上面的写法就不够紧跟时代潮流了,应该这么写了:
 1class Test
 2{
 3    delegate double Calc(double x);
 4
 5    static void Main(string[] args)
 6    {
 7        double[] a = 0.00.51.0 };
 8        double[] results = Apply(a, delegate(double x) { return x * x; });
 9        foreach (double d in results)
10        {
11            Console.WriteLine(d);
12        }

13
14        Console.ReadLine();
15    }

16
17    static double[] Apply(double[] a, Calc f)
18    {
19        double[] result = new double[a.Length];
20        for (int i = 0; i < a.Length; i++) result[i] = f(a[i]);
21        return result;
22    }

23}
代码是变少了,但是说实话,有的时候看这样的代码怎么好像就突然看不明白了呢?
即使这样,微软还是不放过像我这样脑袋不太好使的同志,它竟然推出了Lambda表达式,也就是说,上面的代码也不够先进了,应该这样了:
 1class Test
 2{
 3    delegate double Calc(double x);
 4
 5    static void Main(string[] args)
 6    {
 7        double[] a = 0.00.51.0 };
 8        double[] results = Apply(a, x => x * x);
 9        foreach (double d in results)
10        {
11            Console.WriteLine(d);
12        }

13
14        Console.ReadLine();
15    }

16
17    static double[] Apply(double[] a, Calc f)
18    {
19        double[] result = new double[a.Length];
20        for (int i = 0; i < a.Length; i++) result[i] = f(a[i]);
21        return result;
22    }

23}
那一行代码彻底让我抓狂了,代码可以简洁到这种地步,语法竟然变化这么快,微软简直太牛了!
但是,你如果看一下这三段代码的IL时,你就会发现它们几乎是一模一样的,不一样的仅仅是后面两段代码在编译的时候,编译器自动为我们生成了一个方法。

请文明参与讨论,禁止漫骂攻击。
评论总数:0 [ 查看全部 ] 网友评论
此文章还没有任何评论!
(+5分)
(+4分)
(+3分)
(+2分)
(+1分)
此内容无附件
网站地图 - 知识词汇 - 全文检索 - 广告服务 - 帮助中心 - 联系我们
.:www.cn-web.com
网站技术开发联盟之WEB开发技术知识库
联系人:老韩(QQ:5679551)
晋ICP备07003487号