C#中如何定义和使用一个自定义事件

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

演示的方法是无参数,无返回值情况,实际实际肯定不是这么简单,包含参数的,演示的代码帮助理解事件的发布和订阅使用而已。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

flysh05

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值