C#事件续

对于C#的事件机制我觉得订阅者和发布者非常的形象。
这里写图片描述
这里举一个老湿发布作业的例子。老师有一个发布作业的事件,而学生则需要订阅这个事件,老师一旦发布了作业,学生就要处理作业。这就是所谓的代理,老师动动嘴(抄写新华字典一边),学生就要不停的写,反正老师又不干。
首先需要定义老师这个类

    class Teacher
    {
        //public event EventHandler PublishWorkEvent;//标准的事件定义
        public event Action<object, WorkEventArgs> PublishWorkEvent;//发布作业的事件
        public virtual void PublishEvent(WorkEventArgs e)//触发事件的方法,发布事件
        {
            if(e != null)
            {
                PublishWorkEvent(this,e);//通知所有订阅者,让订阅者处理事件
            }
        }
    }

这里老师布置的作业具体在自定义的事件处理类WorkEventArgs中

    class WorkEventArgs//事件参数类
    {
        public string Works { get; }
        public WorkEventArgs(string works)
        {
            Works = works;
        }
    }

接着定义一个学生类

    class Student
    {
        public void WorkHandler(object sender,WorkEventArgs e)//代理,和老师的发布事件进行关联,老师说学生做
        {
            Console.WriteLine("teacher publish work,student " + e.Works);
        }
    }

接着就是例子了

static void Main(string[] args)
{
   Teacher tr = new Teacher();//事件发布者

   Student st1 = new Student();
   Student st2 = new Student();
   Student st3 = new Student();

   //事件拥有者(发布事件)和事件订阅者(处理事件)建立订阅关系
   tr.PublishWorkEvent += st1.WorkHandler;
   tr.PublishWorkEvent += st2.WorkHandler;
   tr.PublishWorkEvent += st3.WorkHandler;
   while(true)//每隔1s触发一次事件
   {
       Thread.Sleep(1000);
       tr.PublishEvent(new WorkEventArgs("抄写新华字典"));
   }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值