C#学习笔记-委托,event
来源:互联网 发布:省 市 乡镇数据库设计 编辑:程序博客网 时间:2024/06/05 18:42
1,.NET委托(delegate)是一个类型安全的对象,指向可以以后调用的其他方法,委托是内置支持多路广播或异步方法调用的对象。委托类型包含3个重要的信息:它所调用的方法的名称,该方法的参数(可选),该方法的返回值(可选)。
2,当C#编译器处理委托类型时,它自动产生一个派生自System.MulticastDelegate的密封类。这个类及其基类System.Delegate一起为委托提供必要的基础设施,以维护以后将要调用方法的列表。该密封类中的Invoke()用于同步调用当前方法(后台自动被调用),而BeginInvoke()和EndInvoke()用于异步调用当前方法,这三个方法的参数与返回值基于委托的声明。
3,建议将委托成员变量定义为私有的,可以强制封装服务并提供类型安全。
4,协变(宽松委托)允许我们构建一个委托,能指向返回类及相关继承体系的方法。具体做法是把委托的返回对象显示强制转换为继承体系中某个类型。逆变(contravariance)允许我们创建一个委托,指向多个方法,方法的参数是存在传统继承关系的对象。
5,C#允许我们定义泛型委托类型。
6,为了简化构建自定义方法来为委托调用列表增加和删除方法,C#提供了event关键字。在编译器处理event关键字时,它会自动提供注册和注销方法以委托任何必要的成员变量。这些委托成员变量总是声明为私有的,因此不能通过从触发事件的对象直接访问它们。event只是语法糖,只是为了节省我们打字的时间。
定义一个事件分为两步:首先,定义一个委托;然后,通过C# event 关键字用相关委托声明这个事件。编译器事实上会将 event 关键字扩展为两个隐藏的公共方法,一个带 add_ 前缀,一个带 remove_ 前缀,前缀后面是C# event 的名称。
7,匿名方法中最后一个大括号必须以分号结束,否则,将产生一个编译错误。匿名方法不能访问定义方法的 ref 和 out 参数。
8,C#的方法组转换特性允许我们给一个事件处理程序注册简单的名称。比如:
public delegate void MathMessage(string msg);public event MathMessage ComputationFinished;
我们也可以显式转换一个事件处理程序为其关联委托的一个实例。
9,Lambda 表达式(=>)可以应用于任何匿名方法可以应用的场合,它只是用更简单的方法来写匿名方法,彻底简化了对.NET委托类型的使用。其使用方式为:定义参数列表,“=>”标记紧随其后,然后就是表达式。比如:
List<int> evenNumbers = list.FindAll((int i) => ((i % 2) == 0));
Lambda表达式的参数既可以是显式类型化的也可以是隐式类型化的。上面的列子是显式类型化为 int,我们也可以省略 int 即隐式类型化。
- C#学习笔记-委托,event
- C#学习笔记-委托
- C#学习笔记 委托
- 【C#学习笔记】--委托
- C#学习笔记-委托
- C#学习笔记-delegate 委托
- c#学习笔记(六)委托
- C#学习笔记五---委托
- C#学习笔记9-委托
- C#事件 委托 学习笔记
- C#学习笔记之一:委托
- C#学习笔记(6)委托
- c#学习笔记四 委托
- C#学习笔记之委托
- 【C#学习】delegate(委托) 和 event(事件)
- C#事件(event) 解析委托
- C# delegate 委托 event 事件
- C#学习笔记17-Action委托和Func委托
- C#学习笔记-LINQ
- Spring+CXF+Hibernate开发webservice
- 银行系统-简单函数形式
- C#学习笔记-接口,集合与泛型
- 十大注释技巧教你如何书写容易阅读的代码--转载
- C#学习笔记-委托,event
- 程序员技术练级攻略
- SQLServer DBA 三十问(第1~20题)
- 在 Asp.NET MVC 中使用 SignalR 实现推送功能
- 所有元素最大值。
- 【Tech-Android-View】android中ViewGroup中onMeasure()方法
- Dicom Image Viewer for iPad
- 在iOS平台上编译 DCMTK
- The first wxWidgets program:Hello world!