CS4L13——事件

事件

事件是基于委托是存在,是委托的安全包裹
事件用于修饰委托成员变量,让委托的使用更具有安全性

事件和委托的使用基本是一模一样的,事件就是特殊的委托

委托和事件主要区别

  • 事件 不能在外部使用赋值 =​ 符号,只能使用 +=​ 和 -=​,而委托哪里都能用
  • 事件 不能在外部执行 委托哪里都能执行
  • 事件 不能作为函数中的临时变量 委托可以

事件的使用

申明语法:访问修饰符 event 委托类型 事件名;

事件的使用:

  1. 事件是作为成员变量存在于类中
  2. 委托怎么用,事件就怎么用

事件相对于委托的区别是,事件不能在类外部赋值和调用

注意:事件只能作为成员存在于类和接口和结构体中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
class Test
{
//委托成员变量 是用来存储 函数的
public Action myFun;
//事件成员变量 也是用来存储 函数的
public event Action myEvent;

public Test()
{
//事件的使用和委托 一模一样 只有一些 细微的区别
myFun = TestFun;
myFun += TestFun;
myFun -= TestFun;
myFun();
myFun.Invoke();
myFun = null;

myEvent = TestFun;
myEvent += TestFun;
myEvent -= TestFun;
myEvent();
myEvent.Invoke();
myEvent = null;

}

//如果要在外部使用事件,需要额外封装一个 在类内部使用事件的函数,以在外部间接使用函数
public void DoEvent()
{
if (myEvent != null)
{
myEvent.Invoke();
}
}

public void TestFun()
{
Console.WriteLine("123");
}
}

为什么有事件

防止外部随意置空委托,同时也防止外部随意调用委托
事件相当于对委托进行了一次封装,让其更加安全