委托、匿名方法、事件学习小结
来源:互联网 发布:东明知行劳务 编辑:程序博客网 时间:2024/04/30 05:36
一、委托
委托:把方法传递给其他方法,这个方法可以是静态方法。当一个方法在执行的时候,无法确定其执行细节的时候可以使用委托。如,以通用的数组排序方法,当执行的时候无法确定数组元素的类型,从而无法对其进行比较;这时可以把对数据元素进行比较的方法定义为委托,这样就可以完成这个通用的数组排序方法。
1. 委托数组:多个委托实例,执行多个方法;一个委托实例只能执行一个方法
delegate double DoubleOp(double x)
DoubleOp[] operations = {new DoubleOp(方法名), new DoubleOp(方法名)}
operations[0](100)
2. 多波委托:一个委托实例一次执行多个不同的方法,但是执行的顺序不能确定
delegate double DoubleOp(double x)
DoubleOp operation1 = new DoubleOp(方法名)
DoubleOp operation2 = new DoubleOp(方法名)
DoubleOp operations = operation1 + operation2
operations(100)
delegate double DoubleOp(double x)
DoubleOp operations = new DoubleOp(方法名)
operations += new DoubleOp(方法名)
operations(100)
二、匿名方法
匿名方法:简化委托的实现,在要传递的方法比较简单时,不必定义方法,简化代码。
delegate double DoubleOp(double x)
DoubleOp operation1 = delegate(double x){return x * 2}
DoubleOp operation2 = delegate(double x){return x * x}
DoubleOp[] operations = {operation1, operation2}
operations[0](100)
匿名方法的特点:
1. 在匿名方法中不能使用跳转语句跳转到该匿名方法的外部,反之亦然
2. 在匿名方法中不能访问不安全的代码
3. 匿名方法中不能使用外部的ref和out参数,但可以使用匿名方法外部定义的其他变量
三、事件
事件:当一个对象发生了变化通知其他对象发行了什么变化,这种发式就是事件。事件是对象之间的通讯介质。委托是事件实现的方式。事件可以在应用程序中传递信息。
1) 事件包括如下概念:
1. 事件发送器:引发事件的对象,如鼠标按下, 日期大于某一天。事件发送器不知道事件接收器是谁。
2. 事件接收器: 发生某些事件时被通知的任何应用程序、对象或组件。也可以认为是事件处理程序。
3. 事件:一个定义好的委托,事件发送器与事件接收器之间的中介。
4. 注册(封装)事件:发送器定义接收器要使用的委托,接收器将事件处理程序注册到事件中,连接事件处理程序的过程称为封装事件。
2) .net 事件模型
1. EventHandler委托,无返回值,其参数为Object和EventArgs, EventArgs可以在发送器与接收器这间传递信息;自定义事件可以继承这些对象
3) 生成事件
1. 创建事件,即定义一个自定的事件
public delegate void ActionEventHandler(object sender, ActionCancelEventArgs ev);
public static event ActionEventHandler Action;
(ActionCancelEventArgs类也需要创建, 命名与Action事件名对应)
2. 创建事件发送器
protected void OnAction(object sender, ActionCancelEventArgs ev)
{
if (Action != null)
Action(send, ev);
}
(事件引发时执行其对应的委托,命名与Action事件名对应)
3. 创建事件接收器(可以是某个窗口的一个事件)
private void Form1_Action(object sender, ActionCancelEventArgs ev)
{
//do something
//这里可以使用sender, ev的一些属性执行一些逻辑判断
}
4. 注册事件
Form1.Action += new Form1.ActionEventHandler(Form1_Action)
4) 完成一个自定义事件
场景是定一个自定义事件,给Form1注册这个事件,在时间大于当前日期是引发该事件,包括三部分:1.事件2.事件引发类3.事件执行类
1. 事件
public delegate void ActionEventHandler(object sender, ActionCancelEventArgs ev);(可以在命名空间中任意一处定义)
public static event ActionEventHandler Action;(是在被注册事件类中定义,此处是在From1中定义)
定义ActionCancelEventArgs类
2. 事件引发类
private void btnRaise_Click(object sender, EventArgs e)
{
ActionCancelEventArgs cancelEvent = new ActionCancelEventArgs();
OnAction(this, cancelEvent);
if (cancelEvent.Cancel)
//......
else
//......
}
protected void OnAction(object sender, ActionCancelEventArgs ev)(是在被注册事件类中定义,此处是在From1中定义)
{
if (Action != null)
Action(send, ev);
}
3.事件执行类
Form1.Action += new Form1.ActionEventHandler(Form1_Action)
private void Form1_Action(object sender, ActionCancelEventArgs ev)
{
//do something
//这里可以使用sender, ev的一些属性执行一些逻辑判断
}
如果给多个Form注册Action事件的话,激发事件后所有注册过该事件的Form都会去响应该事件。这时如果cancelEvent包括所有注册该事件Form的列表信息;在执行完所有事件响应后,就可以在btnRaise_Click方法中根据cancelEvent得到每个Form执行完事件的一些信,这时就体现了“事件可以在应用程序中传递信息”。
- 委托、匿名方法、事件学习小结
- 委托、事件与匿名方法
- C# 委托 事件 匿名方法
- C#笔记 委托 事件 匿名方法 Action
- Delegate,Action,Func,匿名方法,匿名委托,事件
- Delegate,Action,Func,匿名方法,匿名委托,事件
- 温故而知新:Delegate,Action,Func,匿名方法,匿名委托,事件
- 温故而知新:Delegate,Action,Func,匿名方法,匿名委托,事件
- 温故而知新:Delegate,Action,Func,匿名方法,匿名委托,事件
- Delegate,Action,Func,匿名方法,匿名委托,事件
- 温故而知新:Delegate,Action,Func,匿名方法,匿名委托,事件
- 事件与委托的匿名方法使用方法示例
- 初步理解委托、事件、匿名方法和Lambda
- Delegates, Events, and Anonymous Methods 委托、事件与匿名方法
- c#4.0捷径教程委托、匿名方法和事件笔记
- 匿名方法,委托,特性和事件实例复习
- 委托(4)匿名方法
- C# 匿名方法 委托
- LINUX的目录树
- Java中的事务处理(1)
- 設計模式學習第一篇
- 除了现实还是现实······
- asp.net ajax 1.0中detailview与updatepanel混合使用的例子
- 委托、匿名方法、事件学习小结
- 面向对象的三个基本特征
- DHTML之CSS学习心得(1)
- 30条职场守则
- 组态王6.53破解下载
- 常用正则表达式
- JNI
- BOLG卷首语
- host-i686-pc-cygwin/gcc/Makefile分析