C#学习:Lambda表达式与委托在多线程中的应用

需积分: 9 1 下载量 195 浏览量 更新于2024-08-19 收藏 804KB PPT 举报
本文主要介绍了C#中的Lambda表达式、委托和事件的使用,以及匿名方法的概念,这些都是C#编程中重要的基础知识。 Lambda表达式是C# 3.0引入的一种简洁的函数定义方式,它使得代码更加简洁易读。Lambda表达式的基本形式如下: 1. 单行表达式: - `(参数列表) => 表达式` 例如,`(x) => x + 1` 是一个接受一个整数并返回其加1的结果的Lambda表达式。 - 如果参数类型可以被编译器推断,可以省略类型,如 `x => x + 1`。 2. 多行语句块: - `(参数列表) => { 语句块; }` 如 `x => { Console.WriteLine(x); return x + 1; }`,其中包含了一个或多个语句。 3. 带类型的Lambda表达式: - `(类型 参数) => 表达式` 或者对于多个参数,`(类型 x, 类型 y) => 表达式` 4. 无参数的Lambda表达式: - `() => 表达式` 例如 `() => 1` 返回一个整数1。 委托是C#中的一种类型,它封装了方法的引用,使得方法可以作为参数传递,或者被存储在变量中。声明委托的语法如下: ```csharp delegate 返回值类型 委托类型名(参数列表); ``` 使用委托时,首先需要声明一个委托类型的变量,然后将其赋值为某个方法的引用。例如: ```csharp // 声明委托类型 delegate void StringProcessor(string s); // 声明委托变量 StringProcessor sp; // 将委托变量指向方法 sp = new StringProcessor(SayHello); ``` 委托的组合允许将多个方法链接在一起,形成一个新的委托,它们会被按照添加的顺序依次调用。例如: ```csharp // 创建一个组合委托 ProcessWordDelegate pd = SayHello + ToLower; ``` 事件是基于委托的,用于实现发布-订阅模式,允许对象之间通信而不直接引用对方。在C#中,通常通过`event`关键字声明一个私有的委托实例,然后公开对应的添加和移除事件处理程序的方法。 ```csharp public event EventHandler MyEvent; ``` 匿名方法是不提供名称的函数,它可以直接作为参数传递给委托。在Lambda表达式出现之前,匿名方法是实现类似功能的主要方式,但现在Lambda表达式通常更受青睐,因为它们更简洁。 练习题目要求编写一个程序,根据用户输入调用不同的方法,例如: ```csharp static void Main() { ProcessWordDelegate wd; if (Console.ReadLine() == "1") wd = Hello; else wd = Wow; wd("User"); } static void Hello(string name) { Console.WriteLine($"Hello, {name}!"); } static void Wow(string name) { Console.WriteLine($"Wow, {name}!"); } ``` 这个例子展示了如何根据用户输入选择调用`Hello`或`Wow`方法,通过委托实现方法的选择。