C4.0和VS2010新特性(16)
时间:2025-04-20
时间:2025-04-20
介绍VS2010的新特性等一些新功能
“事件”和“委托”是密不可分的——“事件”恰恰利用了委托的“动态函数”特性使得你可以在不同类之间调用同参同返回值的函数,以便达到“触发”的效果。同时,我们也知道了一般事件定义方法:public event 委托类型名 事件名;——注意,委托类型必须是无返回值的,即void类型。
我们可以把“事件”的初始化和“委托”的初始化加以对比,增强我们对于它们之间关系理解的记忆:
委托: EventHander eh = new EventHander (同参同返回类型函数名)
事件:XXX.Click += new 事件委托名 (同参同返回类型函数名)
请特别注意我放大的这个部分:既然事件的本质是委托,为何不像委托一样使用等于符号,而偏偏使用“+=”进行初始化操作呢?这里就牵涉到了“隐式事件声明”的概念:一般地,任何在NET中的事件都是一个事件列表,通过已经重载的“+=”对事件进行批量的增加或者删除操作。为了解释清楚这个概念,现在我们“+=”代码展开让读者看看,NET究竟背后“秘密地”干了些什么——
(二)显示声明的“事件”:
我们注意到一个非常有意思的现象——如果你把一个类的事件(比如Button)同时指向(绑定到一个以上)的事件函数中的时候:
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
……
this.button1.Click += new
System.EventHandler(this.button1_Click);
this.button1.Click += new
System.EventHandler(this.button2_Click); //自己对应添加一个Button方法
}
此时,如果你在button1_click中写上了弹出显示“1”的msgbox,然后在
button2_click同时写上弹出“2”的对话框,你会“惊讶地”发现不是仅仅弹出2,而是“先1后2”!——Why?难道“事件”天性有记忆力?
如果我们回顾“多路委托”的概念的时候,知道一个委托可以加载多个同参同返回值的委托函数;同样地,一个事件也可以像委托一样进行“多路事件”的加载,只是微软在每一个事件背后本质上做了这样一些东西(拿Button作例子):
public class Button
{
private List<EventHandler> clickevents = new
List<EventHandler>();
public event EventHandler Click
上一篇:量表简介总结
下一篇:协信中心商业项目提案