C#-委托和事件
2013-06-20 11:04
162 查看
前几天导员讲了讲委托的一些东西,今天在这里小结一下。
委托:
C#中一切都是对象,整数可以用整数变量指向它,对象可以用对象变量指向它,函数也可以用委托变量指向它。
声明委托的方式:delegate 返回值类型 委托类型名(参数)
比如:delegate string DeleGet(sring att)
注意:这里除了委托关键字delegate,后面的返回值类型(例子中的第一个string)和参数(例子中的string att)要和委托的函数一致。DeleGet是委托类型名,不是函数名
声明的委托是一种类型,和int、string一样,如果要用的话还需要声明委托类的变量,声明委托类型变量的方式:DeleGet f1;
将委托变量指向函数:DeleGet f1=new DeleGet(SayHello); (或者简写DeleGet f1=SayHello; ),这样就可以像调用普通函数一样把f1当成函数。委托可以看成是函数的指针。
在给一个委托变量添加一个函数后,还可以添加多个:f1+=SayBay; ,这样就形成了一个委托链,当执行这个委托变量的时候就会执行委托变量指向的一个或多个方法。同样的f1-=SayBay;就是移除委托变量中的方法。
事件:
事件语法:event ProcessWordDelegate OnWord;
加了event关键字实现事件机制的好处:用了event事件,不可以修改事件已经注册的值;不可以冒充进行事件通知了。在IntUC类外部就不能通过OnIntInput(3)的方式调用注册的委托了。只能+=、-=!对比“事件1”、“事件2”两个项目区别,“事件和委托的区别”就都明白了!
委托和事件没有可比性,因为委托是类型,事件是属性(对象),下面说的是委托的对象(用委托方式实现的事件)和(标准的event方式实现)事件的区别。事件的内部是用委托实现的。
因为对于事件来讲,外部只能“注册自己+=、注销自己-=”,外界不可以注销其他的注册者,外界不可以主动触发事件,因此如果用Delegate就没法进行上面的控制,因此诞生了事件这种语法。
事件是用来阉割委托实例的,类比用一个自定义类阉割List。事件只能add、remove自己,不能赋值。事件只能+=、-=,不能=
event会自动生成一个delegate变量和两个函数: add和remove,C#编译器用这两个方法支持+=和-=操作符 (*)
public event MyDelegate OnEvent;
内部实现是(不严格的解释)
private MyDelegate OnEvent;
public void Add(MyDelegate d)
{
OnEvent+=d;
}
public void Remove(yDelegate d)
{
OnEvent-=d;
}
因为OnEvent是private的,所以在类外部不能OnEvent(1)触发事件,但是在类内部可以。
public的方法只有Add和Remove,所以只能+=、-=,其他的操作都是不可以的。
委托:
C#中一切都是对象,整数可以用整数变量指向它,对象可以用对象变量指向它,函数也可以用委托变量指向它。
声明委托的方式:delegate 返回值类型 委托类型名(参数)
比如:delegate string DeleGet(sring att)
注意:这里除了委托关键字delegate,后面的返回值类型(例子中的第一个string)和参数(例子中的string att)要和委托的函数一致。DeleGet是委托类型名,不是函数名
声明的委托是一种类型,和int、string一样,如果要用的话还需要声明委托类的变量,声明委托类型变量的方式:DeleGet f1;
将委托变量指向函数:DeleGet f1=new DeleGet(SayHello); (或者简写DeleGet f1=SayHello; ),这样就可以像调用普通函数一样把f1当成函数。委托可以看成是函数的指针。
在给一个委托变量添加一个函数后,还可以添加多个:f1+=SayBay; ,这样就形成了一个委托链,当执行这个委托变量的时候就会执行委托变量指向的一个或多个方法。同样的f1-=SayBay;就是移除委托变量中的方法。
事件:
事件语法:event ProcessWordDelegate OnWord;
加了event关键字实现事件机制的好处:用了event事件,不可以修改事件已经注册的值;不可以冒充进行事件通知了。在IntUC类外部就不能通过OnIntInput(3)的方式调用注册的委托了。只能+=、-=!对比“事件1”、“事件2”两个项目区别,“事件和委托的区别”就都明白了!
委托和事件没有可比性,因为委托是类型,事件是属性(对象),下面说的是委托的对象(用委托方式实现的事件)和(标准的event方式实现)事件的区别。事件的内部是用委托实现的。
因为对于事件来讲,外部只能“注册自己+=、注销自己-=”,外界不可以注销其他的注册者,外界不可以主动触发事件,因此如果用Delegate就没法进行上面的控制,因此诞生了事件这种语法。
事件是用来阉割委托实例的,类比用一个自定义类阉割List。事件只能add、remove自己,不能赋值。事件只能+=、-=,不能=
event会自动生成一个delegate变量和两个函数: add和remove,C#编译器用这两个方法支持+=和-=操作符 (*)
public event MyDelegate OnEvent;
内部实现是(不严格的解释)
private MyDelegate OnEvent;
public void Add(MyDelegate d)
{
OnEvent+=d;
}
public void Remove(yDelegate d)
{
OnEvent-=d;
}
因为OnEvent是private的,所以在类外部不能OnEvent(1)触发事件,但是在类内部可以。
public的方法只有Add和Remove,所以只能+=、-=,其他的操作都是不可以的。
相关文章推荐
- ASP.NET中定制自己的委托和事件参数类
- C# 中的委托和事件
- c#中的delegate(委托)和event(事件)
- 事件委托
- 《C#图解教程》读书笔记之五:委托和事件
- c#中委托和事件(转)
- jQuery的事件委托实例分析
- 先看看解析,事件委托:也称事件代理 就是利用冒泡的原理 把加事件加到父级上,触发执行效果
- 【原创源码】(01):利用事件-委托,实现主-子窗体动态显示,不同菜单栏,不同工具栏。(类似SQL Server 2000 企业管理器)
- WPF 委托和事件实现子窗口回调函数, 实时刷新主窗口控件
- C# 中的委托和事件
- 【MS】关于委托、事件、泛型文章整理
- 事件与委托
- 大白话系列之C#委托与事件讲解(一)
- js 事件委托 阻止事件冒泡---
- C#操作符,委托,事件
- 在.NET2.0中如何更简单的使用委托将方法加载到事件中去
- 委托事件 简写与原来写法 (临时函数)转
- .net的事件与委托
- C#高级编程四十二天----委托和事件