黑马程序员_事件

来源:互联网 发布:不可抗力网络剧百度云 编辑:程序博客网 时间:2024/05/22 15:52

“----------ASP.Net+Android+IOS开发、Net培训、期待与您交流!----------”   

  事件是类在发生其关注的事情时用来通知的一种方式,例如:封装用户界面的类可以定义一个在用户单击该控件时发生的事件,控件类不关心单击按钮时发生了什么
     但它需要告知派生类单击事件已经发生.然后,派生类可选择如何响应
     

     事件发行者(Publisher):
     一个事件发行者,也称作发送者(sender),其实就是一个对象,这个对象会自行维护本身的状态信息,当本身状态信息发生变动时,便触发一个事件
     并通知所有事件订阅者
     事件订阅者(Subscriber):
     对事件感兴趣的对象,也称为接收者(Receiver),可以注册感兴趣的事件,通常需提供一个事件处理程序,在事件发行者触发一个事件后,会自动执行这段代码的内容

     事件的四个步骤:
     1.在事件发行者中定义一个事件
     2.在事件发行者中触发事件
     3.在事件订阅者中定义事件处理程序
     4.向事件发行者中订阅一个事件

 class ClassEvent    {        static void Main(string[] args)        {            Publisher publisher = new Publisher();            Subscriber zs = new Subscriber("张三");            publisher.onPubComputer += new Publisher.PubComputer(zs.Receive);//向事件发行者订阅一个事件(委托类型是静态方法,事件是实例方法)            Subscriber ls = new Subscriber("李四");            publisher.onPubComputer += new Publisher.PubComputer(ls.Receive);            publisher.onPubLife += new Publisher.PubLife(ls.Receive);                        publisher.IssueComputer();//触发事件            publisher.IssueLife();            Console.WriteLine();            Console.WriteLine("一年后,李四取消了对《电脑》杂志的订阅");            Console.WriteLine();            publisher.onPubComputer -= new Publisher.PubComputer(ls.Receive);            publisher.IssueComputer();//触发事件            publisher.IssueLife();            Console.ReadLine();        }    }    //出版社现在出版两本杂志(电脑,生活)    class Publisher //出版社    {        public delegate void PubComputer(string magazineName);  //声明事件所需的代理(个人理解:事件订阅者方法类型(无参无返回值))        public delegate void PubLife(string magazineName);        public event PubComputer onPubComputer;  //事件的声明(事件无返回值,若有,就失去了意义(+=))        public event PubLife onPubLife;         public void IssueComputer()        {  //触发事件的方法            if (onPubComputer != null)            {                Console.WriteLine("出版社发行《电脑》杂志");                onPubComputer("电脑杂志");            }        }        public void IssueLife()        {  //触发事件的方法            if (onPubLife != null)            {                Console.WriteLine("出版社发行《生活》杂志");                onPubLife("生活杂志");            }        }    }    class Subscriber  //订阅者    {        private string name;        public Subscriber(string name) {            this.name = name;        }        public void Receive(string magazineName)        {     //在事件订阅者中定义事件处理程序(与发行者中声明的委托类型一致)            Console.WriteLine(this.name + "已经收到" + magazineName);        }    }

 

 

原创粉丝点击