• Good Example Telling Event and Delegate


    // from <Practical .Net2 and C#2 Harness the Platform , the language, the LFramework>

    //Observer and Subscribers  Pattern

    using System;

    class Subscriber{
     private string m_name;
     public Subscriber(string name){m_name=name;}

     //Method to call whenan event is triggered
     //i.d when a new report is published
     public void OnReceivingInfo(object sender ,EventArgs e){
      NewEventArgs info= e as NewEventArgs;
      if info !=nulll  {
       Console.WriteLine(m_name +" receive the new: "+ ((NewEventArgs)e).GetBulletinInf());
      }
     }
    }

    //An instance of this class represents a new report
    class NewEventArgs:EventArgs{
     private stringm_Reprt;
     public string GetBulletinInfo() {retrun m_Report;}
     public NewsEventArgs(string report){m_Report=report;}
    }

    //The delegate class. Its instances reference subscriber methods.
    public delegate void NewsEventHandler(object sender ,EventArgs e);

    //The class whch publishes new reports by triggering events.
    class NewsBoard{
     
     //events used to publish news
     public event NewsEventHandler USANews;
     public event NewsEventHandler WorldNews;
     
     //Methods used to trigger news publishing from outside NewsBoard.
     public void OnUSANews(NewsEventArgs newReport){
      if (USANews!=null)
        USANews(this,newReport);
     }
     public void OnWorldNews(NewsEventArgs newReport){
      if (WorldNews!=null)
        WorldNews(this,NewReport);
     }
    }

    class Proogram
    {
     public static void Main(){
      NewsBoard newBord=new NewsBoard();
     
      Subscriber bob=new Subcriber("Bob");
      Subscriber joe=new Subcriber("Joe");
      Subscriber Max=new Subcriber("Max");

      //link Subscribers and the new board
      newBoard.USANews +=bob.OnReceivingInfo;
      newBoard.USANews +=joe.OnReceivingInfo;
      newBoard.WordNews +=joe.OnReceivingInfo;
      newBoard.WordNews +=max.OnReceivingInfo;

      //public news reports by triggering events
      newBoard.OnUSANews(new NewsEventArgs("Oil price increase."));
      newBoard.OnWorldNews(new NewsEventArgs("New Election in France."));

      //unsubscribe Joe.
      newBoard.OnUSANews -= new NewsEventArgs(joe.OnReceivingInfo));
     
      newBoard.OnUSANews(new NewsEventArgs("Hurricane alert."));
     
     }
    }

  • 相关阅读:
    MySQL 替换和截取指定位置字符串
    notepad++安装XML格式化插件
    个人信用报告,长啥样?怎么查?
    MySQL 查询decimal字段去除自动补零
    mapstruct使用详解
    电商物流行业中的RDC、FDC和TDC分别表示什么意思?发网详解
    借助Proxifier实现内网访问
    C++源码流程图分析!
    FFmpeg中AVPacket处理函数av_free_packet()和av_packet_free()的区别以及用法
    fopen 和它的读写标识 r、r+、rb+、rt+、w+.....
  • 原文地址:https://www.cnblogs.com/no7dw/p/1696588.html
Copyright © 2020-2023  润新知