关闭

C#事件续

标签: c#
109人阅读 评论(0) 收藏 举报
分类:

对于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("抄写新华字典"));
   }

}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:33238次
    • 积分:914
    • 等级:
    • 排名:千里之外
    • 原创:59篇
    • 转载:5篇
    • 译文:0篇
    • 评论:5条
    文章分类
    最新评论