一.普通模式:

  1. #region 模式1
  2. public Form1()
  3. {
  4. InitializeComponent();
  5. GetProcessByJudge();
  6. }
  7.  
  8. public bool MemoryCountJudge(ProcessClass cl)
  9. {
  10. if (cl.MemoryCount > * )
  11. {
  12. return true;
  13. }
  14. return false;
  15. }
  16.  
  17. public void GetProcessByJudge()
  18. {
  19. Process[] processArray = Process.GetProcesses();
  20. List<ProcessClass> result = new List<ProcessClass>();
  21. foreach (Process item in processArray)
  22. {
  23. result.Add(new ProcessClass(item.Id, item.ProcessName, item.WorkingSet64));
  24. }
  25.  
  26. //Show
  27. foreach (ProcessClass item in result)
  28. {
  29. if (MemoryCountJudge(item))
  30. {
  31. textBox1.Text += string.Format("ID:{0},Name:{1},Size:{2}", item.ID, item.ProcessName, item.MemoryCount) + Environment.NewLine;
  32. }
  33. }
  34. }
  35. #endregion

二.委托模式

  1. #region 模式2
  2. public delegate bool MemoryCountJudgeDelegate(ProcessClass cl);
  3. MemoryCountJudgeDelegate del = null;
  4.  
  5. public Form1()
  6. {
  7. InitializeComponent();
  8. del = new MemoryCountJudgeDelegate(MemoryCountJudge);
  9. GetProcessByJudge();
  10. }
  11.  
  12. public bool MemoryCountJudge(ProcessClass cl)
  13. {
  14. if (cl.MemoryCount > * )
  15. {
  16. return true;
  17. }
  18. return false;
  19. }
  20.  
  21. public void GetProcessByJudge()
  22. {
  23. Process[] processArray = Process.GetProcesses();
  24. List<ProcessClass> result = new List<ProcessClass>();
  25. foreach (Process item in processArray)
  26. {
  27. result.Add(new ProcessClass(item.Id, item.ProcessName, item.WorkingSet64));
  28. }
  29.  
  30. //Show
  31. foreach (ProcessClass item in result)
  32. {
  33. if (del(item))
  34. {
  35. textBox1.Text += string.Format("ID:{0},Name:{1},Size:{2}", item.ID, item.ProcessName, item.MemoryCount) + Environment.NewLine;
  36. }
  37. }
  38. }
  39. #endregion

三.Lambda与匿名委托

  1. public Form1()
  2. {
  3. InitializeComponent();
  4. GetProcessByJudge();
  5. }
  6.  
  7. Func<ProcessClass, bool> func = instance =>
  8. {
  9. if (instance.MemoryCount > * )
  10. {
  11. return true;
  12. }
  13. return false;
  14. };
  15.  
  16. public void GetProcessByJudge()
  17. {
  18. Process[] processArray = Process.GetProcesses();
  19. List<ProcessClass> result = new List<ProcessClass>();
  20. foreach (Process item in processArray)
  21. {
  22. result.Add(new ProcessClass(item.Id, item.ProcessName, item.WorkingSet64));
  23. }
  24.  
  25. //Show
  26. foreach (ProcessClass item in result)
  27. {
  28. if (func(item))
  29. {
  30. textBox1.Text += string.Format("ID:{0},Name:{1},Size:{2}", item.ID, item.ProcessName, item.MemoryCount) + Environment.NewLine;
  31. }
  32. }
  33. }

四.Lambda与匿名委托的改进

  1. public Form1()
  2. {
  3. InitializeComponent();
  4. GetProcessByJudge(instance =>
  5. {
  6. if (instance.MemoryCount > * )
  7. {
  8. return true;
  9. }
  10. return false;
  11. });
  12.  
  13. }
  14.  
  15. public void GetProcessByJudge(Func<ProcessClass, bool> func)
  16. {
  17. Process[] processArray = Process.GetProcesses();
  18. List<ProcessClass> result = new List<ProcessClass>();
  19. foreach (Process item in processArray)
  20. {
  21. result.Add(new ProcessClass(item.Id, item.ProcessName, item.WorkingSet64));
  22. }
  23.  
  24. //Show
  25. foreach (ProcessClass item in result)
  26. {
  27. if (func(item))
  28. {
  29. textBox1.Text += string.Format("ID:{0},Name:{1},Size:{2}", item.ID, item.ProcessName, item.MemoryCount) + Environment.NewLine;
  30. }
  31. }
  32. }

四种代码:执行效果

总结: 1.委托其实就是方法的指针,任何方法均可转化为委托,然后调用委托来执行方法。虽说在这里看到代码量增多,但是真正的用处在构建复杂系统或搭建ORM时,将产生巨大作用。

2.系统提供了Action和Func两种匿名委托,Action是不需要返回结果值,Func需要返回结果值。在这里,我们可以不用建立自己的委托,调用匿名委托即可。

3.结合Lambda表达式和委托的兼容性,将语句方法体 用Lambda表达式来转换,达到简化代码的目的。

Linq学习系列-----1.2 一个简单方法的改进思考及不同的执行形式的更多相关文章

  1. LINQ学习系列-----2.1 一个Linq语句

    Linq语句介绍 先上源码: 上述代码涵盖了Linq新特性: 代码解析: 针对本文中的几点特性,前面有文章进行阐述.

  2. LINQ学习系列-----1.3 扩展方法

    这篇内容继续接着昨天的Lambda表达式的源码继续下去.昨天讲了Lambda表达式,此篇讲扩展方法,这两点都是Linq带来的新特性.    一.扩展方法介绍   废话不多说,先上源码截图: 上图中Ge ...

  3. LINQ学习系列-----2.3 迭代器带来的延迟查询

    此篇博文承接上一篇博文: LINQ学习系列-----2.2 迭代器 一.第一次执行                      废话不多说,上源码: 执行结果下图: 为什么会这样?其实原因很简单 fro ...

  4. scrapy爬虫学习系列二:scrapy简单爬虫样例学习

    系列文章列表: scrapy爬虫学习系列一:scrapy爬虫环境的准备:      http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_python_00 ...

  5. [Ruby on Rails系列]6、一个简单的暗语生成器与解释器(上)

    [0]Ruby on Rails 系列回顾 [Ruby on Rails系列]1.开发环境准备:Vmware和Linux的安装 [Ruby on Rails系列]2.开发环境准备:Ruby on Ra ...

  6. 用Qt写软件系列三:一个简单的系统工具(上)

    导言 继上篇<用Qt写软件系列二:QIECookieViewer>之后,有一段时间没有更新博客了.这次要写的是一个简单的系统工具,需求来自一个内部项目.功能其实很简单,就是查看当前当前系统 ...

  7. Netty源码学习系列之4-ServerBootstrap的bind方法

    前言 今天研究ServerBootstrap的bind方法,该方法可以说是netty的重中之重.核心中的核心.前两节的NioEventLoopGroup和ServerBootstrap的初始化就是为b ...

  8. Linux内核分析第三周学习总结:构造一个简单的Linux系统MenuOS

    韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.Linux内 ...

  9. Golang学习-第二篇 搭建一个简单的Go Web服务器

    序言 由于本人一直从事Web服务器端的程序开发,所以在学习Golang也想从Web这里开始学起,如果对Golang还不太清楚怎么搭建环境的朋友们可以参考我的上一篇文章 Golang的简单介绍及Wind ...

随机推荐

  1. 张高兴的 Xamarin.Android 学习笔记:(一)环境配置

    最近在自学 Xamarin 和 Android ,同时发现国内在做 Xamarin 的不多.我在自学中间遇到了很多问题,而且百度到的很多教程也有些过时,现在打算写点东西稍微总结下,顺便帮后人指指路了. ...

  2. Spring4.0.1+Quartz2.2.1实现定时任务调度[亲测可用]

    Spring4.0.1+Quartz2.2.1实现定时任务调度[亲测可用] tip:只需要配置xml文件即可 1.第三方依赖包的引入 <properties> <project.bu ...

  3. UVa1635 - Irrelevant Elements

    通过观察发现其规律符合杨辉三角 需要注意的是最后ai的系数是C(i-1,n-1) 那么,问题就可以变成判断C(0,n-1),C(1,n-1)....C(n-1,n-1)哪些是m的倍数 只需要计算出m的 ...

  4. 读Zepto源码之Data模块

    Zepto 的 Data 模块用来获取 DOM 节点中的 data-* 属性的数据,和储存跟 DOM 相关的数据. 读 Zepto 源码系列文章已经放到了github上,欢迎star: reading ...

  5. 单源最短路径问题-Dijkstra算法

    同样是层序遍历,在每次迭代中挑出最小的设置为已知 ===================================== 2017年9月18日10:00:03 dijkstra并不是完全的层序遍历 ...

  6. (转)Java开发中的23种设计模式详解

    原文出自:http://blog.csdn.net/zhangerqing 一.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型 ...

  7. MongoDB固定集合(Capped Collections)

    MongoDB 固定集合(Capped Collections)是性能出色且有着固定大小的集合,对于大小固定,我们可以想象其就像一个环形队列,当集合空间用完后,再插入的元素就会覆盖最初始的头部的元素! ...

  8. MongoDB全文检索

    1. 全文检索概念: 全文检索是对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式.  (暂时不支持中文) ...

  9. javascript编写一个简单的编译器(理解抽象语法树AST)

    javascript编写一个简单的编译器(理解抽象语法树AST) 编译器 是一种接收一段代码,然后把它转成一些其他一种机制.我们现在来做一个在一张纸上画出一条线,那么我们画出一条线需要定义的条件如下: ...

  10. left join 条件位置问题

    表一: