现在的位置: 首页 > 综合 > 正文

C#中新特性的学习:Delegate、匿名方法、lambda表达式

2013年02月11日 ⁄ 综合 ⁄ 共 1300字 ⁄ 字号 评论关闭

       最近在修改一个项目的代码中,用到了lambda表达式的写法,就顺便学习了一下,发现弄清楚lambda必须要弄清楚匿名方法,弄清楚匿名方法必须要弄清楚Delegate,弄清楚Delegate还要理解C++的指针,还好之前用过Delegate,闲话少叙,还是分享一下测试代码吧。

1、Delegate

public delegate void MyDelegate(string message);
public class TestClass
{
 public void HelloDelegate(string message,MyDelegate md)
 {
  if (md!=null)
  {
   md(message);
  }
 }
}


private void button4_Click(object sender, EventArgs e)
{
 TestClass tc = new TestClass();
 tc.HelloDelegate("hello delegate", HelloDelegate);
}

public void HelloDelegate(string message)
{
 MessageBox.Show(message);
}

2、匿名方法:

TestClass tc = new TestClass();
tc.HelloDelegate("hello anonymous method", delegate(string name) 
{
	MessageBox.Show(name);
});

3、Lambda表达式:

TestClass tc = new TestClass();
tc.HelloDelegate("hello lambda", n => MessageBox.Show(n));

       其实比较一下代码就看得出来,匿名方法只是简化了一下代理的写法,而lambda只是简化了一个匿名方法的的写法,当然,这只是lambda的的一个应用,再就是lambda在集合方面的应用也是很方便的,这后面再与大家分享。

         在写测试代码的时候发现,lambda、匿名方法、隐式类型、对象初始化器等C#的新特性都是和javascript的语法很相似,搜索了一下网上的文章,还真有此说法。

引用一下原文:

C#历史回顾

       回顾C#发展的历史,C# 1.0完全是模仿Java,并保留了C/C++的一些特性如struct,新学者很容易上手;C# 2.0加入了泛型,也与Java1.5的泛型如出一辙;C# 3.0加入了一堆语法糖,并在没有修改CLR的情况下引入了Linq,简直是神来之笔,虽然很多项目出于各种各样如性能之类的原因没有采用,但非常适合小型程序的快速开发,减轻了程序员的工作量,也提高了代码的可读性;C# 4.0增加了动态语言的特性,从里面可以看到很多javascript、python这些动态语言的影子。虽然越来越偏离静态语言的道路,但从另一个角度来说,这些特性也都是为了提高程序员的生产力。至于被接受与否,还是让时间来说话吧。

引用自:http://developer.51cto.com/art/200908/143718.htm

 

总之,收获不小,希望有兴趣的朋友相互交流

 

 

抱歉!评论已关闭.