c#-委托,匿名方法,lambda表达的关系
什么是委托:
包含单个方法的委托和函数指针是相似的,不同的是,委托是面向对象的并且是类型安全的
声明委托类型:
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表达的关系的更多相关文章
- 委托-异步调用-泛型委托-匿名方法-Lambda表达式-事件【转】
1. 委托 From: http://www.cnblogs.com/daxnet/archive/2008/11/08/1687014.html 类是对象的抽象,而委托则可以看成是函数的抽象.一个委 ...
- C#多线程+委托+匿名方法+Lambda表达式
线程 下面是百度写的: 定义英文:Thread每个正在系统上运行的程序都是一个进程.每个进程包含一到多个线程.进程也可能是整个程序或者是部分程序的动态执行.线程是一组指令的集合,或者是程序的特殊段,它 ...
- C# delegate event func action 匿名方法 lambda表达式
delegate event action func 匿名方法 lambda表达式 delegate类似c++的函数指针,但是是类型安全的,可以指向多个函数, public delegate void ...
- Lambda表达式的演化,委托-匿名方法-Func-Lambda
匿名方法 很多时候委托接收的方法是一次性的或者方法体是非常简单的... 例三: 我们可以写成: 有没有发现我们每次都要定义委托,很多时候签名可能是一样的.这样就没有必要定义重复的. 然后又过了很久很久 ...
- lambda 委托 匿名方法
委托: delegate是C#中的一种类型,它实际上是一个能够持有对某个方法的引用的类.与其它的类不同,delegate类能够拥有一个签名(signature),并且它只能持有与它的签名相匹配的方法的 ...
- C#委托总结-匿名方法&Lambda表达式
1,匿名方法 匿名方法可以在声明委托变量时初始化表达式,语法如下 之前写过这么一段代码: delegate void MyDel(string value); class Program { void ...
- 委托delegate 泛型委托action<> 返回值泛型委托Func<> 匿名方法 lambda表达式 的理解
1.使用简单委托 namespace 简单委托 { class Program { //委托方法签名 delegate void MyBookDel(int a); //定义委托 static MyB ...
- 18、(番外)匿名方法+lambda表达式
概念了解: 1.什么是匿名委托(匿名方法的简单介绍.为什么要用匿名方法) 2.匿名方法的[拉姆达表达式]方法定义 3.匿名方法的调用(匿名方法的参数传递.使用过程中需要注意什么) 什么是匿名方法? 匿 ...
- c# 中的委托以及匿名方法lambda
1.委托的定义internal delegate int MyAddFunDe(int a,int b)2.匿名方法1)MyAddFunDe fun = delegate(int a,int b){ ...
随机推荐
- Oracleclient+PLSQL Developer实现远程登录Oracle数据库
Oracle数据库功能强大.性能卓越,在造就这些长处的同一时候,也导致Oracle占内存比較多.针对这个问题,我们怎样做到取其精华去其糟粕呢? 解决方式:我们能够在局域网内的server上安装庞大的O ...
- Swift初探一
今天安装了一下Xcode6-Beta版,想来体验一下Swift的魅力:安装Swift系统最低版本号为:10.9.3 仅仅看看一点The Swift Programming Language,以下给大家 ...
- 探秘ReSharper8.1版本中Architecture(架构工具)的改进
在ReSharper 8.0新版本中,有一个叫做Architecture(结构工具)的新功能,此功能被定义为项目依赖关系分析.其目的是让用户可视化操作解决方案的结构.接下来,小编将在ReSharper ...
- Dotfuscator自定义规则中的元素选择
Dotfuscator是专业的.NET程序代码保护软件.是支持规则自定义的,你可以对重命名.程序控制流.字符串加密等等功能自定义规则.在进行规则自定义过程中,可以通过元素的不同选择,满足自己的程序需要 ...
- 前台框架的选择 EasyUI、DWZ、ligerui
EasyUI1.3.1+MVC4.0+EF5.0 番外篇 关于前台框架的选择 EasyUI.DWZ.ligerui 昨天发了EasyUI1.3.1+MVC4.0+EF5.0实战之一 开篇及布局控件介绍 ...
- PLSQL导入/导出数据方法
PLSQL导入/导出数据方法 PLSQL导入/导出数据方法 以前导数据库信息的时候,总是会先开启sql窗口,把自己手写的建表文件复制进去,然后再导入数据信息. 今天突然懒得去找以前的建表文件,而想用S ...
- javascript 学习总结(七)String对象
1.string对象中可以传正则的函数介绍 /* match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配. 该方法类似 indexOf() 和 lastIndexOf(),但是 ...
- GoogleGoogle搜索解析
GoogleGoogle搜索解析 是一个类似Google趋势SEO 在 线keyword工具.它的正式口号提出“在搜索些什么”.利用Google搜索解析,能够比較特定区域.类别.时间范围以及搜索资源之 ...
- 你是否应该使用一个Javascript MVC框架?
你是否应该使用一个Javascript MVC框架?本文摘自smashingmagazine的Journey Through The JavaScript MVC Jungle部分内容,希望对大家有帮 ...
- MySql 集群配置
MYSQL CLUSTER方案介绍 本文的大致框架来自罗志威.黄川的报告, 在它的基础上进行简化和修改一些bug并且添加了主从复制的章节,最后做出该文档 MySQL Cluster 是MySQL适合于 ...