1. 事件发布者
首先声明一个委托,该委托是事件发布者和订阅者连接的桥梁。
例如,使用关键字 delegate 定义一个委托
public delegate void MyDelegateHandler(Object sender,EventArgs args);
然后基本声明的委托定义一个事件,使用关键字event
public event MyDelegateHandler MyEvent;
最后发布事件
MyEvent?.Invoke();
2. 事件订阅者
定义事件实际执行的方法。
如下一个简单实例代码,演示如果自定义一个事件,如何使用事件,如果绑定事件的方法:
假定有这样的一个场景,员工离职,财务部需要接触该员工与该部们的关系,正常员工离职后,财务就不核算该员工的工资等费用了,IT也需要解除该员工的门禁等权限设置。
(1)定义EmployeeSeparator类,自定义一个无参数,无返回值的委托,以及基于该委托的事件
public class EmployeeSeparator
{
public delegate void EmployeeSeparatorEventHandler();
public event EmployeeSeparatorEventHandler EmployeeSeparatored;
public void Separate()
{
EmployeeSeparatored?.Invoke();
}
}
(2)定义Finance类,定义一个事件执行的方法
public class Finance
{
private readonly EmployeeSeparator employeeSeparator;
public Finance(EmployeeSeparator employeeSeparator)
{
this.employeeSeparator = employeeSeparator;
}
public void EmployeeSeparatedEventHandler()
{
Console.WriteLine("Finance department: employee separation process related to finance");
}
}
(3)定义IT类,定义方法,在构造函数中绑定方法到事件
public class IT
{
private readonly EmployeeSeparator employeeSeparator;
public IT(EmployeeSeparator employee)
{
this.employeeSeparator = employee;
employee.EmployeeSeparatored += Employee_EmployeeSeparatored;
}
private void Employee_EmployeeSeparatored()
{
Console.WriteLine("IT deparatment: employee separation process related to IT");
}
}
(4)执行事件的发布订阅,执行
class Program
{
static void Main(string[] args)
{
EmployeeSeparator employeeSeparator=new EmployeeSeparator();
Finance finance=new Finance(employeeSeparator);
employeeSeparator.EmployeeSeparatored += finance.EmployeeSeparatedEventHandler;
IT it= new IT(employeeSeparator);
employeeSeparator.Separate();
Console.ReadKey();
}
}
财务部类的方法,在事件发布中订阅+=, IT部类在构造函数中传入事件发布类,在构造函数中,事件就绑定了方法。
运行结果入下:
Finance department: employee separation process related to finance
IT deparatment: employee separation process related to IT
演示的方法是无参数,无返回值情况,实际实际肯定不是这么简单,包含参数的,演示的代码帮助理解事件的发布和订阅使用而已。
网友评论