C#知识回顾:深入理解委托delegate
需积分: 9 187 浏览量
更新于2024-09-09
收藏 268KB PDF 举报
"C#知识回顾,重点讲解委托delegate的深入理解和应用"
在C#编程语言中,委托扮演着至关重要的角色,它是一种类型安全的函数指针,允许我们把方法当作参数传递,或者将多个方法链接在一起执行。本文将延续上篇的内容,深入探讨委托的声明、调用、多播委托以及委托的演化。
1. **两个简单Demo:委托的声明与调用**
示例代码展示了如何声明和实例化委托。在第4行,`MyDel`是一个接受一个字符串参数的无返回值委托类型。在第10行,我们将静态方法`Print`赋值给`MyDel`类型的变量`del`。这表示`del`现在可以调用`Print`方法。需要注意的是,无论方法是静态还是实例,只要其签名与委托匹配,都可以被委托实例化。
2. **创建多播委托**
多播委托是C#中的一个特性,允许一个委托实例引用多个方法。当这个委托被调用时,它会按照添加顺序依次执行所有关联的方法。例如,可以使用`+=`运算符将新的方法添加到已有的委托实例中,`-=`运算符则可以移除方法。这种特性在事件处理中非常常见,因为一个事件可能触发多个响应。
3. **委托的简单演化过程**
随着C#版本的升级,委托的使用方式也在不断发展。早期,我们主要通过命名方法来创建委托实例。而现在,我们可以使用匿名方法(如`delegate { ... }`)和lambda表达式(如`(param) => { ... }`)更简洁地定义和实例化委托。这些新方式不仅更易读,也使得代码更灵活。
**示例2** 展示了使用lambda表达式的委托实例化:
```csharp
MyDel del = (int n, int m) => Console.WriteLine($"{n} + {m} = {n + m}");
```
这里,lambda表达式`(int n, int m) => Console.WriteLine($"{n} + {m} = {n + m}")`的签名与`MyDel`委托匹配,因此可以直接赋值给`del`。
4. **委托与方法签名**
使用委托时,关键是确保方法的签名与委托定义匹配,包括参数类型、数量和顺序,以及返回类型。例如,如果`MyDel`的签名是`(int x, int y)`,那么传递给它的方法也必须有相同的签名。
5. **注意事项**
虽然委托可以处理`out`参数,但在多播事件委托中,由于调用顺序的不确定性,使用`out`参数可能会导致预期外的结果。因此,通常建议避免在事件处理中使用`out`参数。
总结,委托是C#中一种强大的工具,它促进了代码的模块化和灵活性,特别是在处理事件和回调时。通过掌握委托的声明、实例化、多播以及与lambda表达式的结合,开发者可以编写出更加高效和易于维护的代码。
141 浏览量
点击了解资源详情
点击了解资源详情
141 浏览量
120 浏览量
105 浏览量
117 浏览量
368 浏览量
2021-02-08 上传
HelloKitty19901231
- 粉丝: 555
- 资源: 706
最新资源
- Gooper1 Data Pack:新的 G1DP 存储库。 去贡献!-开源
- iOS Apprentice v7.0 (iOS12 & Swift4.2 & Xc.zip
- PersonalPage:我的NextJS个人开发人员页面
- CS300P07
- AppAuth-JS:JavaScript客户端SDK,用于与OAuth 2.0和OpenID Connect提供程序进行通信
- js和CSS3炫酷圆形导航菜单插件
- 裂纹检测:使用计算机视觉工具箱进行裂纹检测-matlab开发
- 开源软路由OPENWRT2020.9.8原版VMWARE固件
- Onboard-SDK:DJI Onboard SDK官方资料库
- projetoFinal-ips-2-ano
- chips_thermal_face_dataset:芯片热敏面数据集是一个大规模的热敏面数据集(来自3个不同大洲的1200幅男性和女性图像,年龄在18-23岁之间)。 该数据集将可供全世界的研究人员使用最新的深度学习方法创建准确的热面部分类和热面部识别系统
- pamansayurdev.github.io:网站paman sayur
- MO_Ring_PSO_SCD:它是用于多模态多目标优化的多目标 PSO-matlab开发
- resynthesizer:用于纹理合成的gimp插件套件
- NavigationDrawer:这是一个示例项目,用于演示如何制作导航抽屉。此外,在这个项目中,我添加了材料设计,因此对于想要实现材料设计、工具栏等的人也有帮助
- hacker-news-clone