/// <summary>
/// 爬虫委托
/// </summary>
/// <param name="crawlerCode">爬虫编码</param>
delegate void CrawlerDelegate(string crawlerCode);
class Program
{
static void Main(string[] args)
{
{
//.net framework 1.0 最原始
CrawlerDelegate crawlerDelegate = new CrawlerDelegate(Execute);
crawlerDelegate.Invoke("爬取第1页");
} {
//.net framework 2.0 匿名方法
CrawlerDelegate crawlerDelegate = new CrawlerDelegate(delegate (string crawlerCode) { Console.WriteLine(crawlerCode); });
crawlerDelegate.Invoke("爬取第2页");
} {
//.net framework 3.0 Lambda
CrawlerDelegate crawlerDelegate = new CrawlerDelegate((string crawlerCode) => { Console.WriteLine(crawlerCode); });
crawlerDelegate.Invoke("爬取第3页");
} {
//.net framework 3.0 Lambda 参数类型可以省略,参数会被自动推算,俗称“语法糖”
CrawlerDelegate crawlerDelegate = new CrawlerDelegate((crawlerCode) => { Console.WriteLine(crawlerCode); });
crawlerDelegate.Invoke("爬取第4页");
} {
//.net framework 3.0 Lambda 如果方法体只有一行,可以省略大括号和分号
CrawlerDelegate crawlerDelegate = new CrawlerDelegate((crawlerCode) => Console.WriteLine(crawlerCode));
crawlerDelegate.Invoke("爬取第5页");
} {
//.net framework 3.0 Lambda 直接省略创建对象的写法,编译器内部自动波处理
CrawlerDelegate crawlerDelegate = (crawlerCode) => Console.WriteLine(crawlerCode);
crawlerDelegate.Invoke("爬取第6页");
} Console.ReadKey();
} /// <summary>
/// 执行爬虫
/// </summary>
/// <param name="crawlerCode">爬虫编码</param>
private static void Execute(string crawlerCode)
{
Console.WriteLine(crawlerCode);
} /// <summary>
/// 爬虫执行器
/// </summary>
/// <param name="crawlerContext">爬虫上下文</param>
/// <param name="method">爬虫逻辑</param>
static void CrawlerFerformer(CrawlerContext crawlerContext, CrawlerDelegate method)
{
method.Invoke(crawlerContext.CrawlerCode);
}
} /// <summary>
/// 爬虫上下文
/// </summary>
class CrawlerContext
{
/// <summary>
/// 爬虫编码
/// </summary>
public string CrawlerCode { get; set; }
}

  

Lambda表达式演变历史的更多相关文章

  1. Lambda表达式演变

    Lambda表达式是一种匿名函数.   演变步骤:   一般的方法委托 => 匿名函数委托 => Lambda表达式   Lambda表达式其实并不陌生,他的前生就是匿名函数,所以要谈La ...

  2. C#Lambda表达式演变和Linq的深度解析

    Lambda 一.Lambda的演变 Lambda的演变,从下面的类中可以看出,.Net Framwork1.0时还是用方法实例化委托的,2.0的时候出现了匿名方法,3.0的时候出现了Lambda. ...

  3. lambda表达式之进化

    前言 在C#我们可以自定义委托,但是C#为什么还要内置泛型委托呢?因为我们常常要使用委托,如果系统内置了一些你可能会用到的委托,那么就省去了定义委托,然后实例化委托的步骤,这样一来既使代码看起来简洁而 ...

  4. 从匿名方法到 Lambda 表达式的推演过程

    Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数. 通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数. 以上是msdn官网对Lambda 表达式 ...

  5. C#中的Lambda表达式和表达式树

    在C# 2.0中,通过方法组转换和匿名方法,使委托的实现得到了极大的简化.但是,匿名方法仍然有些臃肿,而且当代码中充满了匿名方法的时候,可读性可能就会受到影响.C# 3.0中出现的Lambda表达式在 ...

  6. Lambda表达式和表达式树

    在C# 2.0中,通过方法组转换和匿名方法,使委托的实现得到了极大的简化.但是,匿名方法仍然有些臃肿,而且当代码中充满了匿名方法的时候,可读性可能就会受到影响.C# 3.0中出现的Lambda表达式在 ...

  7. C++11中的Lambda表达式

    原文地址:C++中的Lambda表达式 作者:果冻想 一直都在提醒自己,我是搞C++的:但是当C++11出来这么长时间了,我却没有跟着队伍走,发现很对不起自己的身份,也还好,发现自己也有段时间没有写C ...

  8. LinQ—Lambda表达式

    概述 本篇博客主要解说lambda表达式,在这里将它的来龙去脉,主要是从托付,匿名函数这些方面过度讲的,当然,在讲托付和匿名函数的时候,主要是从Lambda的角度出发讲的,可能它们还具有其他的一些作用 ...

  9. Qt5中使用lambda表达式

    c11新特性中加入了lambda表达式,所以Qt 也支持 需在.pro文件中加入 CONFIG += c++11 例子: QString program = "C:/Windows/Syst ...

随机推荐

  1. PAT甲级——A1153 DecodeRegistrationCardofPAT【25】

    A registration card number of PAT consists of 4 parts: the 1st letter represents the test level, nam ...

  2. Java 实例 - 状态监测

    以下实例演示了如何通过继承 Thread 类并使用 currentThread.getName() 方法来监测线程的状态: Main.java 文件 1 2 3 4 5 6 7 8 9 10 11 1 ...

  3. [已解决]报错: No module named pip

    cmd中敲命令: python -m ensurepip 更新升级pip命令: python -m pip install --upgrade pip

  4. 【题解】An Easy Problem

    题目描述 给定一个正整数N,求最小的.比N大的正整数M,使得M与N的二进制表示中有相同数目的1. 举个例子,假如给定的N为78,其二进制表示为1001110,包含4个1,那么最小的比N大的并且二进制表 ...

  5. CTU OPEN 2017 Shooting Gallery /// 区间DP

    题目大意: 给定n 给定n个数 选定一个区间留下其他消去 要求区间两端的两个数一样 若成功留下一个区间 则在选定区间的基础上 继续进行上述操作 直到无法再选出这样的区间 求最多操作数 按区间长度由短到 ...

  6. springboot Service层单元测试

    两个实现类实现同一个Service接口 public interface CustomUrlService { List<ShopMetrics> getShopMetrics(); } ...

  7. springboot中的mybatis是如果使用pagehelper的

    springboot中使用其他组件都是基于自动配置的AutoConfiguration配置累的,pagehelper插件也是一样的,通过PageHelperAutoConfiguration的,这个类 ...

  8. static变量与普通变量的异同

    1.static局部变量与普通局部变量的异同 相同点:都是局部变量,在函数内部定义,仅能被该模块内部的语句所访问. 不同点: 1)内存分配与释放: static修饰的局部变量在内存中存放在静态存储区, ...

  9. css负边距之详解(子绝父相)

    来源 | http://segmentfault.com 原文 |  The Definitive Guide to Using Negative Margins   自从1998年CSS2作为推荐以 ...

  10. JavaScript性能优化之摇树

    作者|Jeremy Wagner译者|薛命灯 现代 Web 应用程序可能会变得非常巨大,特别是它们的 JavaScript 部分.HTTP Archive 网站的数据显示,截至 2018 年中,传输到 ...