上2篇文章都是不带事件参数的情况,如下事件演示如何自定义事件参数和使用自定义的事件参数。
1.定义事件参数
public class EmployeeEventArgs : EventArgs
{
public int EmpId { get; set; }
public string Name { get; set; }
}
2. 定义事件的发布者
public class EmployeeSeparator
{
public event EventHandler<EmployeeEventArgs> EmployeeSeparatored;
public void Separate()
{
EmployeeEventArgs employeeEventArgs = new EmployeeEventArgs { EmpId = 123, Name = "John" };
EmployeeSeparatored?.Invoke(this, employeeEventArgs);
}
}
3.事件订阅者
改写财务部类型,使用自定义事件参数
class Finance
{
private readonly EmployeeSeparator employeeSeparator;
public Finance(EmployeeSeparator employee)
{
this.employeeSeparator = employee;
employeeSeparator.EmployeeSeparatored += EmployeeSeparator_EmployeeSeparatored;
}
private void EmployeeSeparator_EmployeeSeparatored(object sender, EmployeeEventArgs e)
{
Console.WriteLine($"Finance department: employee {e.EmpId} {e.Name} separetion process related to Finance department. ");
}
}
IT部门同样的方式修改:
public class IT
{
private readonly EmployeeSeparator employeeSeparator;
public IT(EmployeeSeparator employee)
{
this.employeeSeparator = employee;
employeeSeparator.EmployeeSeparatored += EmployeeSeparator_EmployeeSeparatored;
}
private void EmployeeSeparator_EmployeeSeparatored(object sender, EmployeeEventArgs e)
{
Console.WriteLine($"IT department: employee {e.EmpId} {e.Name} separetion process related to IT department. ");
}
}
4. 事件的执行
class Program
{
static void Main(string[] args)
{
EmployeeSeparator employeeSeparator = new EmployeeSeparator();
Finance finance = new Finance(employeeSeparator);
IT it = new IT(employeeSeparator);
employeeSeparator.Separate();
Console.ReadKey();
}
}
运行效果如下:
Finance department: employee 123 John separetion process related to Finance department.
IT department: employee 123 John separetion process related to IT department.
这样事件就包含自定义的参数值了,这个事件参数类可以在订阅事件中创建不同的示例使用。
网友评论