delegate
delegate是用来声明“函数指针”的关键词。具有以下特点:
定义方式:变量语义
public delegate void Trigger();
实例化方式:类语义
//...
var trigger1 = new Trigger(PrintA);
var trigger2 = new Trigger(PrintB);
//...
public void PrintA() => Console.WriteLine("A");
public void PrintB() => Console.WriteLine("B");
运算方式:变量语义
运算指:把两个函数指针按照前后调用顺序结合成新的指针。
var trigger3 = trigger1 + trigger2;
trigger3();
输出
A
B
event
event是专门用于修饰delegate变量的修饰词。即,可有如下两种方式声明一个delegate变量
public event Trigger trigger4;
public Trigger trigger5;
event修饰过的delegate有如下几种限定:
- trigger4只能定义在类中,不能定义在类外部。trigger5则可以。
- 假设trigger4定义在类A中,只有A内部的函数能激发trigger4,A外部的指令没有权限激发。而trigger5没有这个限制。参考这里
- 假设trigger4定义在类A中,A外部的指令无法给trigger4赋值=,只能注册+=或注销-=函数指针。而trigger5没有这个限制。参考这里