最近在修改一個項目的代碼中,用到了lambda表達式的寫法,就順便學習了一下,發現弄清楚lambda必須要弄清楚匿名方法,弄清楚匿名方法必須要弄清楚Delegate,弄清楚Delegate還要理解C++的指針,還好之前用過Delegate,閒話少敘,還是分享一下測試代碼吧。
1、Delegate
[csharp]
<span style="font-size:18px;">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);
}
</span>
2、匿名方法:
[csharp]
<span style="font-size:18px;">TestClass tc = new TestClass();
tc.HelloDelegate("hello anonymous method", delegate(string name)
{
MessageBox.Show(name);
});</span>
3、Lambda表達式:
[csharp] px;">TestClass tc = new TestClass();
tc.HelloDelegate("hello lambda", n => MessageBox.Show(n));</span>
其實比較一下代碼就看得出來,匿名方法只是簡化了一下代理的寫法,而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這些動態語言的影子。雖然越來越偏離靜態語言的道路,但從另一個角度來說,這些特性也都是為了提高程序員的生產力。至於被接受與否,還是讓時間來說話吧。