委托、Lambda表达式、事件系列02,什么时候该用委托
2014-10-01 11:01
567 查看
假设要找出整型集合中小于5的数。
如果要找出整型集合中小于10的数,可能首先想到的是增加一个方法。
其实,GetNumbersLessThanFive方法和GetNumbersLessThanTen方法简直太像了,就if语句不一样。虽然if语句不一样,但逻辑是一样的:输入一个整型数,输出bool类型。这正是委托该登场的时候!
先声明一个委托,接收int类型参数,返回bool值。现在,if语句可以用委托来替代了,因为委托参数列表和返回类型与if语句吻合。
可见,当多个方法有重复的部分,且输入类型一致,返回类型一致,就可以考虑使用委托了。
“委托、Lambda表达式、事件系列”包括:
static void Main(string[] args)
{
IEnumerable<int> source = new List<int>(){2, 3, 4, 5, 6, 7, 8, 9,10, 11};
var result = GetNumbersLessThanFive(source);
foreach (int n in result)
{
Console.WriteLine(n);
}
}
static IEnumerable<int> GetNumbersLessThanFive(IEnumerable<int> numbers)
{
foreach (int number in numbers)
{
if (number < 5) yield return number;
}
}
如果要找出整型集合中小于10的数,可能首先想到的是增加一个方法。
static IEnumerable<int> GetNumbersLessThanTen(IEnumerable<int> numbers)
{
foreach (int number in numbers)
{
if (number < 10) yield return number;
}
}
其实,GetNumbersLessThanFive方法和GetNumbersLessThanTen方法简直太像了,就if语句不一样。虽然if语句不一样,但逻辑是一样的:输入一个整型数,输出bool类型。这正是委托该登场的时候!
先声明一个委托,接收int类型参数,返回bool值。现在,if语句可以用委托来替代了,因为委托参数列表和返回类型与if语句吻合。
internal delegate bool MyCalculateDelegate(int val);
class Program
{
static void Main(string[] args)
{
IEnumerable<int> source = new List<int>(){2, 3, 4, 5, 6, 7, 8, 9,10, 11};
MyCalculateDelegate del = LessThanFive;
var result = GetNumbers(source,del);
foreach (int n in result)
{
Console.WriteLine(n);
}
}
static IEnumerable<int> GetNumbers(IEnumerable<int> numbers, MyCalculateDelegate del)
{
foreach (int number in numbers)
{
if (del(number)) yield return number;
}
}
static bool LessThanFive(int val)
{
return val < 5;
}
static bool LessThanTen(int val)
{
return val < 10;
}
}
可见,当多个方法有重复的部分,且输入类型一致,返回类型一致,就可以考虑使用委托了。
“委托、Lambda表达式、事件系列”包括:
委托、Lambda表达式、事件系列01,委托是什么,委托的基本用法,委托的Method和Target属性
委托、Lambda表达式、事件系列02,什么时候该用委托
委托、Lambda表达式、事件系列03,从委托到Lamda表达式
委托、Lambda表达式、事件系列04,委托链是怎样形成的, 多播委托, 调用委托链方法,委托链异常处理
委托、Lambda表达式、事件系列05,Action委托与闭包
委托、Lambda表达式、事件系列06,使用Action实现观察者模式,体验委托和事件的区别
委托、Lambda表达式、事件系列07,使用EventHandler委托
相关文章推荐
- 委托、Lambda表达式、事件系列01,委托是什么,委托的基本用法,委托的Method和Target属性
- 委托、Lambda表达式、事件系列03,从委托到Lamda表达式
- 委托、Lambda表达式、事件系列05,Action委托与闭包
- 委托、Lambda表达式、事件系列04,委托链是怎样形成的, 多播委托, 调用委托链方法,委托链异常处理
- 委托、Lambda表达式、事件系列07,使用EventHandler委托
- 委托、Lambda表达式、事件系列06,使用Action实现观察者模式,体验委托和事件的区别
- 委托与事件学习理解2--进阶包括Lambda表达式、匿名类
- C# Note2:委托(delegate) & Lambda表达式 & 事件(event)
- 清理(委托类型实例)事件处理(实例)的函数及Lambda表达式
- 【转】【UNITY3D 游戏开发之七】C# 中的委托、事件、匿名函数、Lambda 表达式
- 委托,事件,回调,匿名函数与Lambda表达式详解
- 委托、 Lambda表达式和事件——委托
- 委托 事件 lambda表达式
- 委托、匿名函数、Lambda表达式和事件的学习
- C#编程入门_委托、事件、Lambda表达式_20
- 浅谈委托、委托与事件、委托进化成lambda表达式和Linq
- 一个例子帮你搞懂C#语言高级特性系列(02) --- 委托、事件和Lambda表达式
- Java8 实战系列-02-lambda 表达式简介
- 委托、 Lambda表达式和事件——事件
- 【转】【UNITY3D 游戏开发之七】C# 中的委托、事件、匿名函数、Lambda 表达式