c#-委托,匿名方法,lambda表达的关系

时间:2023-03-08 20:10:41

什么是委托:

包含单个方法的委托和函数指针是相似的,不同的是,委托是面向对象的并且是类型安全的

声明委托类型:

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表达式(方法)

控制台

  class Program
{
static void Main(string[] args)
{
Console.WriteLine("传统委托代码示例:");
FindListDelegate();
Console.Write("\n"); Console.WriteLine("使用匿名方法的示例:");
FindListAnonymousMethod();
Console.Write("\n"); Console.WriteLine("使用Lambda的示例");
FindListLambdaExpression(); Console.Read(); }
//传统的调用委托的实例
static void FindListDelegate()
{
//创建泛型list类
List<string> list = new List<string>(); list.AddRange(new string[] { "asp.net课程","Java课程","" });
Predicate<string> findPredicate = new Predicate<string>(IsBookCategory);
List<string> bookCategory = list.FindAll(findPredicate); foreach (string str in bookCategory)
{
Console.WriteLine("{0}\t", str);
}
}
//谓词方法,传递给FindALl进行书籍分类判断
static bool IsBookCategory(string str)
{
return str.EndsWith("课程") ? true : false;
} //使用匿名方法来进行搜索过程 static void FindListAnonymousMethod()
{
//先创建泛型list类
List<string> list = new List<string>();
list.AddRange(new string[] { "asp.net课程", "MVC课程,123" }); //在这里,使用匿名方法直接为委托创建一个代码块,而不用去创建单独的方法 List<string> bookCategory = list.FindAll(delegate(string str)
{
return str.EndsWith("课程") ? true : false;
}
);
foreach (string str in bookCategory)
{
Console.WriteLine("{0}\t", str);
}
}
//使用lambda来实现搜索过程
static void FindListLambdaExpression()
{ //先创建一个泛型的list类
List<string> list = new List<string>();
list.AddRange(new string[] { "asp.net课程", "MVC课程","" });
//在这里使用lambda来创建一个委托方法 List<string> bookCategory = list.FindAll((string str) => str.EndsWith("课程")); foreach (string str in bookCategory)
{
Console.WriteLine("{0}\t", str);
}
} }

委托,匿名方法,lambda表达式

:刚开始委托其实很难理解,网上也有一大堆,但是有些过于繁琐

最通俗的来理解  到底 委托,匿名方法和lambda之间三者的关系:

起先,  1:   委托简化代码的编写量

     2: 后来觉得代码多了,搞一个匿名方法

     3: 再后来,匿名方法也麻烦,就搞了一个lambda表达式,

        完了,lambda简单吧,所以就是这样

2017-2-22补充

c#-委托,匿名方法,lambda表达的关系

c#-委托,匿名方法,lambda表达的关系

相关文章