什么是委托:
包含單個方法的委托和函數指針是相似的,不同的是,委托是面向對象的並且是類型安全的
聲明委托類型:
delegate void mydel(int x);
聲明委托和聲明方法差不多,兩個不通點就在於
委托以:delegate關鍵詞開頭。沒有方法主體
創建委托對象:
del =new mydel(示例方法);
組合委托:
mydel dela=方法;
mydel delb=方法
mydel delc=dela+delb;
委托增減方法
mydel del=方法//創建初始化
del+=方法;//增加方法
del-=方法;//刪減方法
匿名方法:
delegate int del(int param);
static void main()
{
del mydel=delgate(intx){return x+20};
....
}
lambda方法:
mydel del=delegate(int x){return x+1;}//匿名方法
mydel del= (int x)=>{return +1;}//lambda表達式(方法)
控制台

1 class Program 2 { 3 static void Main(string[] args) 4 { 5 Console.WriteLine("傳統委托代碼示例:"); 6 FindListDelegate(); 7 Console.Write("\n"); 8 9 Console.WriteLine("使用匿名方法的示例:"); 10 FindListAnonymousMethod(); 11 Console.Write("\n"); 12 13 Console.WriteLine("使用Lambda的示例"); 14 FindListLambdaExpression(); 15 16 Console.Read(); 17 18 19 20 } 21 //傳統的調用委托的實例 22 static void FindListDelegate() 23 { 24 //創建泛型list類 25 List<string> list = new List<string>(); 26 27 list.AddRange(new string[] { "asp.net課程","Java課程","123" }); 28 Predicate<string> findPredicate = new Predicate<string>(IsBookCategory); 29 List<string> bookCategory = list.FindAll(findPredicate); 30 31 foreach (string str in bookCategory) 32 { 33 Console.WriteLine("{0}\t", str); 34 } 35 } 36 //謂詞方法,傳遞給FindALl進行書籍分類判斷 37 static bool IsBookCategory(string str) 38 { 39 return str.EndsWith("課程") ? true : false; 40 } 41 42 //使用匿名方法來進行搜索過程 43 44 static void FindListAnonymousMethod() 45 { 46 //先創建泛型list類 47 List<string> list = new List<string>(); 48 list.AddRange(new string[] { "asp.net課程", "MVC課程,123" }); 49 50 //在這里,使用匿名方法直接為委托創建一個代碼塊,而不用去創建單獨的方法 51 52 List<string> bookCategory = list.FindAll(delegate(string str) 53 { 54 return str.EndsWith("課程") ? true : false; 55 } 56 ); 57 foreach (string str in bookCategory) 58 { 59 Console.WriteLine("{0}\t", str); 60 } 61 } 62 //使用lambda來實現搜索過程 63 static void FindListLambdaExpression() 64 { 65 66 //先創建一個泛型的list類 67 List<string> list = new List<string>(); 68 list.AddRange(new string[] { "asp.net課程", "MVC課程","123" }); 69 //在這里使用lambda來創建一個委托方法 70 71 List<string> bookCategory = list.FindAll((string str) => str.EndsWith("課程")); 72 73 foreach (string str in bookCategory) 74 { 75 Console.WriteLine("{0}\t", str); 76 } 77 } 78 79 }
:剛開始委托其實很難理解,網上也有一大堆,但是有些過於繁瑣
最通俗的來理解 到底 委托,匿名方法和lambda之間三者的關系:
起先, 1: 委托簡化代碼的編寫量
2: 后來覺得代碼多了,搞一個匿名方法
3: 再后來,匿名方法也麻煩,就搞了一個lambda表達式,
完了,lambda簡單吧,所以就是這樣
2017-2-22補充