event(学习一)

来源:互联网 发布:antlr python 编辑:程序博客网 时间:2024/06/03 14:51

/*事件是类在发生其关注的事件时用来提供通知的一种方式
 *
 */
using System;
using System.Collections.Generic;
using System.Text;

namespace Event
{
 public class Publisher   //出版社
 {
  public delegate void PubComputer(string AMagazineName);//声明事件代理
  public delegate void PubLife(string AMagazineName);
  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("生活雜志");
   }
  }
 }

 public class Subscriber   //订阅者
 {
  private string _Name;
  public Subscriber(string AName)
  {
   this._Name = AName;
  }
  //以下方法的參數和返回值必須和OnPubComputer代理一樣
  public void Receive(string AMagazineName)
  {
   Console.WriteLine(_Name + "已經收到" + AMagazineName);
  }
 }

 class Story
 {
  static void Main()
  {
   Publisher Pub = new Publisher();
   Subscriber Sub = new Subscriber("張三");
   //實際上是事件實現動態加載方法
   Pub.OnPubComputer += new Publisher.PubComputer(Sub.Receive);

   Subscriber Sub1 = new Subscriber("李四");
   Pub.OnPubLife += new Publisher.PubLife(Sub1.Receive);
   Pub.IssueComputer(); //触发事件
   Pub.IssueLife();

   Pub.OnPubLife -= new Publisher.PubLife(Sub1.Receive);
   Pub.IssueComputer(); //触发事件
   Pub.IssueLife();
   Console.ReadLine();
  }
 }
}
 以下是显示结果

执行结果

原创粉丝点击