上次說的只是方法的一些基本東西,今天講講重載和 Lambda 表達式。函數
方法的重載(overload)指的是同一個名字的方法,有着不同的方法簽名(method signature),函數體裏面的內容也能夠不同。方法的簽名包括方法的名稱和一個參數列表(方法的參數順序和類型),注意,返回值不是方法的簽名。實例構造函數簽名由它的每個形參(從左到右 的順序)的類型和種類(值、引用或輸出參數)組成。
平時用到重載是爲了在給定了參數列表和一組候選函數成員的狀況下,選擇一個最佳函數成員來實施調用。下面看一段代碼:spa
using System; namespace SomeNotes { class Program { public static void Main(string[] args) { Student stu = new Student(); Console.WriteLine(stu.Add(1, 2)); Console.WriteLine(stu.Add(1.2, 2.3)); stu.Add(); } } class Student { public int Add(int a, int b) { return a + b; } public double Add(double a, double b) { return a + b; } public void Add() { Console.WriteLine("No parameter!"); } } }
上面的Student
類裏面有三個都叫作Add
的方法,可是這三個方法的簽名都不同,他們就構成了重載的關係。stu
調用Add
函數的時候,根據給的參數不同,調用的Add
也不同。
在寫重載的時候,當你打出Add
這個方法的時候,Visual Studio會提示你有三個重載。
最後的結果以下圖所示:
code
最後再強調一點:函數的返回值不是函數的簽名!blog
Lambda表達式是一個匿名函數,用於節約代碼量,提升寫程序的效率。
Lambda表達式的語法爲:( parameter ) => statement 。參數列表能夠有多個參數,也能夠沒有參數(void),參數的類型能夠顯式聲明,也能夠隱式聲明,由於編譯器能根據上下文推斷參數的類型。下面舉幾個例子:事件
(x, y) => x * y //多參數,隱式類型=> 表達式 x => x * 5 //單參數, 隱式類型=>表達式 x => { return x * 5; } //單參數,隱式類型=>語句塊 (int x) => x * 5 //單參數,顯式類型=>表達式 (int x) => { return x * 5; } //單參數,顯式類型=>語句塊 () => Console.WriteLine() //無參數
這些都是有效的聲明。其實Lambda表達式也十分形象,就是把左邊括號裏面的參數,傳到右邊的表達式裏面,通常都是一個方法。爲何說Lambda表達式是一個匿名函數呢?你能夠看看錶達式裏面有沒有出現過方法的名字,它裏面只包括了原來方法體裏面的一些邏輯,卻沒有爲方法命名,這就體現了匿名方法的好處,省略了聲明的步驟,只須要給出邏輯,就能完成這個方法。
Lambda表達式更多狀況下用在事件、委託裏面,由於還沒說到,因此這部分先挖坑了,到時候說委託和事件的時候會給例子出來的。(不是我懶)編譯器