什么是委托:
包含单个方法的委托和函数指针是相似的,不同的是,委托是面向对象的并且是类型安全的
声明委托类型:
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 Listlist = new List ();26 27 list.AddRange(new string[] { "asp.net课程","Java课程","123" });28 Predicate findPredicate = new Predicate (IsBookCategory);29 List 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 list = new List ();48 list.AddRange(new string[] { "asp.net课程", "MVC课程,123" });49 50 //在这里,使用匿名方法直接为委托创建一个代码块,而不用去创建单独的方法51 52 List 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 list = new List ();68 list.AddRange(new string[] { "asp.net课程", "MVC课程","123" });69 //在这里使用lambda来创建一个委托方法70 71 List 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补充