「匿名方法」主要是為了「簡化不必要的程式碼的撰寫」,讓程式開發人員更專心把心力放在程式的設計與邏輯上。
其中比較常用的例子是當使用「委派(Delegate)」時,不需要建立額外的方法。
什麼是「匿名方法」?
- 「匿名方法」就是沒有名字的方法。(匿名跟委派也有點關係…)
- 他的本質就是一個函數
- 當你方法只會用到一次的時候,就可以考慮用匿名函數
語法
1
2
delegate (arguments) { statements }
- delegate: 匿名函式的關鍵字
- arguments: 傳入的參數,可以多個參數(以逗號「
,」隔開) - statements: 此函式執行的程式碼片段
範例
delegate 這段就叫做「匿名函數」
他的本質就是一個函數
1
2
3
delegate (string name) {
return name.ToLower();
}
使用「匿名方法」的委派
使用匿名方法的委派,不需要明確定義出執行委派方法的名稱,而是在宣告委派後直接寫出程式碼。
1
2
3
4
5
6
7
8
9
10
11
//1.宣告一個委派類型的變數,它代表一個方法(沒有回傳值,需要傳入string類型的參數數)
delegate void Printer(string s);
static void Main(string[] args)
{
//2.宣告委派後直接寫出程式碼
Printer p2 = delegate (string s) {
Console.WriteLine(s);
};
//3.調用方法
p2("匿名方法真好用!");
}
不使用「匿名方法」的委派
不使用匿名方法的委派,需要明確定義出執行委派方法的名稱之後,再進行委派。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//1.委派會調用的方法
static void Display(string s)
{
Console.WriteLine(s);
}
//2.宣告一個委派類型的變數,它代表一個方法(沒有回傳值,需要傳入string類型的參數數)
delegate void Printer(string s);
static void Main(string[] args)
{
//3.宣告並實體化委派,並傳入相對應的方法
Printer p = new Printer(Display);
//4.調用方法
p("匿名方法真好用,我是不使用匿名方法的委派!");
}
委派概念
- 宣告一個委派指向一個方法(把方法封裝進變數內)
- 委派所指向的方法,必須符合委派定義的方法
- 跟實體化「執行緒」很像,都是傳入一個方法
1
Thread t = new Thread(SayHi);
使用委派3個步驟
- 宣告一個委派類型的變數,指向一個方法
- 宣告並實體化委派,並傳入相對應的方法
- 執行方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 1. 宣告一個委派類型的變數,指向一個方法(該方法沒有回傳值,需傳入一個string類型的參數)
delegate void Printer(string s);
static void Main(string[] args)
{
// 2.宣告並實體化委派,並傳入相對應的方法
Printer p = new Printer(Display);
// 3.執行方法
p("Hello");
}
//委派要調用的方法
static void Display(string s)
{
Console.WriteLine(s);
}
MSDN - 使用具名和匿名方法委派的比較 (C# 程式設計手冊)
[C# 筆記] Delegate 匿名函數 by R
Book: Visual C# 2005 建構資訊系統實戰經典教本