一.普通模式:

        #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. php实现伪静态的方法

    mod_rewrite是Apache的一个非常强大的功能,它可以实现伪静态页面.下面我详细说说它的使用方法 1.检测Apache是否支持mod_rewrite 通过php提供的phpinfo()函数查 ...

  2. Thrift - 快速入门

    简单实例 有homebrew的话,直接执行以下命令即可,brew会处理相关依赖(https://thrift.apache.org/docs/install/). brew install thrif ...

  3. 本地idea调试spark2.x程序

    1.构建使用idea 构建maven 项目 选择org.scala-tools.archetypes:scala-archetype-simple,然后一直点next,maven最好选中本地配置国内源 ...

  4. .xlsx文件总是默认用2007 Microsoft Office component 打开,且无法更改用EXCEL打开的解决方法

    之前装了OFFICE2003,后来改装了 OFFICE2007,之后XLSX文件双击总是用2007 Microsoft Office component 打开,导致无法打开. 解决方法: 打开注册表R ...

  5. JavaScript基础一(js基础函数与运算符)

    [使用js的三种方式] 1.在HTML标签中,直接内嵌js(并不提倡使用) <button onclick=" alert('点就点')"> 点我啊</butto ...

  6. Linux中常见问题(磁盘 定时任务)

    第1章 linux无法上网 1)     第一步,先ping域名. ping www.baidu.com 2)再ping一个公网ip , ping 223.5.5.5/223.6.6.6/114.11 ...

  7. Matrix 矩阵

    CSS3中的矩阵指的是一个方法,书写为matrix()和matrix3d(),前者是元素2D平面的移动变换(transform),后者则是3D变换.2D变换矩阵为3*3, 如上面矩阵示意图:3D变换则 ...

  8. iPad web APP 开发相关

    1.移除 browser chrome,全屏启动  <meta name="apple-mobile-web-app-capable" content="yes&q ...

  9. css 权重 特殊性

    选择器的特异性由 CSS2 规范定义如下:     !important的规则比其他的权值都大     p{color: red !important} 如果声明来自于“style”属性,而不是带有选 ...

  10. Problem J: 求个最大值

    Problem J: 求个最大值 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 871  Solved: 663[Submit][Status][Web ...