一.普通模式:

        #region 模式1
public Form1()
{
InitializeComponent();
GetProcessByJudge();
} public bool MemoryCountJudge(ProcessClass cl)
{
if (cl.MemoryCount > * )
{
return true;
}
return false;
} public void GetProcessByJudge()
{
Process[] processArray = Process.GetProcesses();
List<ProcessClass> result = new List<ProcessClass>();
foreach (Process item in processArray)
{
result.Add(new ProcessClass(item.Id, item.ProcessName, item.WorkingSet64));
} //Show
foreach (ProcessClass item in result)
{
if (MemoryCountJudge(item))
{
textBox1.Text += string.Format("ID:{0},Name:{1},Size:{2}", item.ID, item.ProcessName, item.MemoryCount) + Environment.NewLine;
}
}
}
#endregion

二.委托模式

        #region 模式2
public delegate bool MemoryCountJudgeDelegate(ProcessClass cl);
MemoryCountJudgeDelegate del = null; public Form1()
{
InitializeComponent();
del = new MemoryCountJudgeDelegate(MemoryCountJudge);
GetProcessByJudge();
} public bool MemoryCountJudge(ProcessClass cl)
{
if (cl.MemoryCount > * )
{
return true;
}
return false;
} public void GetProcessByJudge()
{
Process[] processArray = Process.GetProcesses();
List<ProcessClass> result = new List<ProcessClass>();
foreach (Process item in processArray)
{
result.Add(new ProcessClass(item.Id, item.ProcessName, item.WorkingSet64));
} //Show
foreach (ProcessClass item in result)
{
if (del(item))
{
textBox1.Text += string.Format("ID:{0},Name:{1},Size:{2}", item.ID, item.ProcessName, item.MemoryCount) + Environment.NewLine;
}
}
}
#endregion

三.Lambda与匿名委托

        public Form1()
{
InitializeComponent();
GetProcessByJudge();
} Func<ProcessClass, bool> func = instance =>
{
if (instance.MemoryCount > * )
{
return true;
}
return false;
}; public void GetProcessByJudge()
{
Process[] processArray = Process.GetProcesses();
List<ProcessClass> result = new List<ProcessClass>();
foreach (Process item in processArray)
{
result.Add(new ProcessClass(item.Id, item.ProcessName, item.WorkingSet64));
} //Show
foreach (ProcessClass item in result)
{
if (func(item))
{
textBox1.Text += string.Format("ID:{0},Name:{1},Size:{2}", item.ID, item.ProcessName, item.MemoryCount) + Environment.NewLine;
}
}
}

四.Lambda与匿名委托的改进

public Form1()
{
InitializeComponent();
GetProcessByJudge(instance =>
{
if (instance.MemoryCount > * )
{
return true;
}
return false;
}); } public void GetProcessByJudge(Func<ProcessClass, bool> func)
{
Process[] processArray = Process.GetProcesses();
List<ProcessClass> result = new List<ProcessClass>();
foreach (Process item in processArray)
{
result.Add(new ProcessClass(item.Id, item.ProcessName, item.WorkingSet64));
} //Show
foreach (ProcessClass item in result)
{
if (func(item))
{
textBox1.Text += string.Format("ID:{0},Name:{1},Size:{2}", item.ID, item.ProcessName, item.MemoryCount) + Environment.NewLine;
}
}
}

四种代码:执行效果

总结: 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. IO基础内容(File)

    JavaIO基础内容 IO技术概述 Output 把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作 Input 把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操 ...

  2. 系统讲解CSS,前端开发最神奇的技术,新手的你一定不能错过

    前面小编带领大家重温了前端开发中最基本的HTML语言.如果你已经掌握了这门语言,那么恭喜你,可以去深入了解CSS技术了.CSS技术最主要的功能就是弥补HTML标记对在页面中显示外观的不足,对这些标记对 ...

  3. 再识QT(1)

    2015年的时候开始接触QT,自学了1个月,由于没有项目驱动,也没人指导,最终还是撇下了,水平也仅限于拖拖控件,做一些简单的界面,对QT的内部机制完全是懵逼的.时隔两年,最近由于公司项目需要使用QT, ...

  4. Python读取SQLite文件数据

    近日在做项目时,意外听说有一种SQLite的数据库,相比自己之前使用的SQL Service甚是轻便,在对数据完整性.并发性要求不高的场景下可以尝试! 1.SQLite简介: SQLite是一个进程内 ...

  5. 基于Hadoop(M/R)的MySQL到Oracle海量数据切割

    # 背景介绍 大数据时代,海量数据的迁移会很普遍地出现在各个应用场景,本文主要讨论利用Sqoop的分布式能力从关系型数据库MySQL到Oracle的海量数据迁移和切割. # 所需环境 1 JDK+Ec ...

  6. 博客志第一天——判断一个整数N是否是完全平方数?

    关注博客园很久,今天是第一次写博客.先附上一个C题目:写一个函数判断一个整数是否为完全平方数,同时是否该数的各位数至少两个相同的数字 #include <stdio.h> #include ...

  7. Single linked List by pointer

    其实本应该从一般性的表讲起的,先说顺序表,再说链表 .但顺序表的应用范围不是很广,而且说白了就是数组的高级版本,他的优势仅在于两点:1.逻辑直观,易于理解.2.查找某个元素只需要常数时间--O(1), ...

  8. 最详细的浏览器css hack

    注意点: 网上很多资料中常常把!important也作为一个hack手段,其实这是一个误区.!important常常被我们用来更改样式,而不是兼容hack.造成这个误区的原因是IE6在某些情况下不主动 ...

  9. code forces 439 C. The Intriguing Obsession

    C. The Intriguing Obsession time limit per test 1 second memory limit per test 256 megabytes input s ...

  10. PHP(一)OOP基础

    [面向过程&面向对象] 1.面向过程:专注于解决一件事情的过程.最大的特点,是有一个个函数来实现功能需求 2.面向对象:专注于有哪一个对象来实现这个功能,最大的特点,时产生一个个具有属性和方法 ...