结果不是一样的吗

时间:2021-12-12 06:08:29

一、初阶了解事件

  事件是委托的一个子集,为了满足“广播/订阅”模式的需求而生。

  事件就是限制委托字段的包装器。限制外界对委托字段内部的访谒。相当于封装。

事件就是能够产生的什么工作,主要有以下5个主体。

1、事件的拥有者(event source,东西)

2、事件的成员(event,成员)

3、事件的响应者(event subscriber,东西)

4、事件措置惩罚惩罚器(event hander,成员)——素质上是一个回调要领

5、事件订阅——把事件措置惩罚惩罚器与事件关联在一起,素质上是一种以委托类型为根本的约定。

事件不会主动产生,必然是被拥有者内部逻辑触发,才会产生。

  1.1事件订阅的写法

A、对照常用的订阅写法

this.myButton.Click += new System.EventHandler(this.myButton_Click);

也可以像下面这么写

this.myButton.Click +=this.myButton_Click

eventhander就是事件措置惩罚惩罚器,只不过可以省略,直接写要领名。

+=为事件订阅操纵符

+=后面的就是事件的措置惩罚惩罚器,格局就是 事件 +=(订阅)xxxx(事件措置惩罚惩罚器)

B、另一种订阅方法的写法

这种写法直接使用了匿名要领,也就是要领只针对本次事件使用,并不复用。

 

拉姆达写法

 

简写

 

事件只能在+=或者-=的左边,其他的时候无法挪用事件。

  1.2事件措置惩罚惩罚器

下面的代码是不是措置惩罚惩罚器?

protected virtual void OnPriceChanged(PriceChangedEventArgs e) { if (PriceChanged != null) PriceChanged(this, e); }

结论:是的,OnPriceChanged就是事件措置惩罚惩罚器。此外,ElapsedEventArgs和EventArgs 都是事件措置惩罚惩罚器,一个是timer elapse的措置惩罚惩罚器另一个是click措置惩罚惩罚器,你可以自界说事件措置惩罚惩罚器,好比我上面举的例子,自界说的事件措置惩罚惩罚器生命要加Protected,以限制访谒级别。

结果不是一样的吗

闪电就是事件,,扳手是属性,方块是要领。

事件措置惩罚惩罚器(event hander,成员)——素质上是一个回调要领

注意:

A事件措置惩罚惩罚器是要领成员

B挂接事件措置惩罚惩罚器的时候,可以使用委托实例,也可以直接使用要领名,这是个语法糖

C事件措置惩罚惩罚器对事件的订阅不是随意的,匹配与否由声明事件时所使用的委托类型来检测

D事件可以同步挪用也可以异步挪用

  1.3事件自己的声明

简略的声明格局:

字段式声明,field-like

public event OrderEventHandler Order;

完整的声明格局

private OrderEventHandler orderEventHandler; public event OrderEventHandler Order { add { this.orderEventHandler += value; } remove { this.orderEventHandler -= value; } }

  1.4事件声明的语法糖

事件委托的声明有语法糖,就是system类下面的eventhandler这个要领,他是厂商给我们界说好的一个语法糖。

 

结果不是一样的吗

如果使用这个语法糖,就可以不用再去声明委托事件了,如下就可以不写:

public delegate void OrderEventHandler(Customer customer,OrderEventArgs e);

二、事件的应用   2.1事件根基声明模式

  这种方法跟委托的写法对照相像,只不过在声明一个委托东西时加上event关键字。然后委托要领的后缀要加上eventhandler或者handler,至于为什么加?

A加eventhandler为了让所有人明确是为了给事件处事的

B加eventhandler为了表白这个委托是用来约束事件措置惩罚惩罚器的

C 委托创建的实例是用来存储事件的