zoukankan      html  css  js  c++  java
  • C# 事件

    事件:

        //定义委托
        public delegate void PubComputerEventHandler(object sender, MyEventArgs e);
        public delegate void PubLifeEventHandler(object sender, MyEventArgs e);
    
        //封装EventArgs类
        public class MyEventArgs : EventArgs
        {
            private readonly string m_magazineName; //杂志名称
            private readonly DateTime m_pubDate;    //出刊日期
            public MyEventArgs(string magazineName, DateTime pubDate)
            {
                m_magazineName = magazineName;
                m_pubDate = pubDate;
            }
            public string magazineName
            {
                get { return m_magazineName; }
            }
            public DateTime pubDate
            {
                get { return m_pubDate; }
            }
        }
    
        //出版社类
        public class Publisher
        {
            //出版社名
            protected string _pubName;
            public Publisher(string pubName)
            {
                _pubName = pubName;
            }
            public Publisher() { }
            //电脑杂志事件
            public event PubComputerEventHandler PubComputer;     //事件,只能在出版社类内部被调用,外面只能通过+=或-=赋值,不能直接调用它。
    
            protected virtual void OnPubComputer(Publisher pub, MyEventArgs e)  //虚方法,派生类中可调用。
            {
                PubComputerEventHandler handler = pub.PubComputer;  //定义临时的委托
                if (handler != null)
                {
                    Console.WriteLine(string.Format("{0}:发行了电脑杂志【{1}】 {2}", pub._pubName, e.magazineName, e.pubDate.ToString()));
                    System.Threading.Thread.Sleep(1000);
                    handler(this, e);
                }
            }
    
            //生活杂志事件
            public event PubLifeEventHandler PubLife;
    
            protected virtual void OnPubLife(Publisher pub, MyEventArgs e)
            {
                if (pub.PubLife != null)
                {
                    Console.WriteLine(string.Format("{0}:发行了生活杂志【{1}】 {2}", pub._pubName, e.magazineName, e.pubDate.ToString()));
                    System.Threading.Thread.Sleep(1000);
                    pub.PubLife(this, e);
                }
            }
    
        }
    
        //管理员类
        public class Manager : Publisher
        {
            //发行电脑杂志
            public void IssuePubComputer(Publisher pub, string magezineName, DateTime pubDate)
            {
                OnPubComputer(pub, new MyEventArgs(magezineName, pubDate));
            }
            //发行生活杂志
            public void IssuePubLife(Publisher pub, string magezineName, DateTime pubDate)
            {
                OnPubLife(pub, new MyEventArgs(magezineName, pubDate));
            }
        }
    
        //订阅者类
        public class Subscriber
        {
            private string name;
            public Subscriber(string name)
            {
                this.name = name;
            }
            public void Receive(object sender, MyEventArgs e)
            {
                Console.WriteLine("{0} {1} 已经收到“{2}”", DateTime.Now.ToString(), name, e.magazineName);
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
    
                //实例出版社对象: 清华出版社qh_Pub
                Publisher qh_Pub = new Publisher("清华出版社");
    
                //订阅者用户对象
                Subscriber zs = new Subscriber("张三");
                Subscriber ls = new Subscriber("李四");
    
                //开始订阅
                qh_Pub.PubComputer += new PubComputerEventHandler(zs.Receive); //订阅电脑杂志
                qh_Pub.PubComputer += new PubComputerEventHandler(ls.Receive); //订阅电脑杂志
                qh_Pub.PubLife += new PubLifeEventHandler(ls.Receive);         //订阅生活杂志
    
                //管理员定期发刊杂志
                Manager manager = new Manager();
                manager.IssuePubComputer(qh_Pub, "苦逼程序猿㈠", DateTime.Now); //清华出版社发刊
                SleepTime(3);
                manager.IssuePubLife(qh_Pub, "365百姓话题v1", DateTime.Now); //清华出版社发刊
    
                //=============================================================================
                //一个月后,李四取消了电脑杂志,王五订阅了生活杂志
                Console.WriteLine();
                Console.WriteLine("一个月后。。。");
                SleepTime(5);
                Subscriber ww = new Subscriber("王五");
                qh_Pub.PubComputer -= new PubComputerEventHandler(ls.Receive); //取消电脑杂志
                qh_Pub.PubLife += new PubLifeEventHandler(ww.Receive);         //订阅生活杂志
    
                //管理员定期发刊杂志
                manager.IssuePubComputer(qh_Pub, "苦逼程序猿㈡", DateTime.Now); //清华出版社发刊
                SleepTime(3);
                manager.IssuePubLife(qh_Pub, "365百姓话题v2", DateTime.Now); //清华出版社发刊
    
                Console.ReadKey();
            }
    
            private static void SleepTime(int n)
            {
                DateTime dt = DateTime.Now;
                do
                {
                    Console.Write(".");
                    System.Threading.Thread.Sleep(1000);
                } while ((DateTime.Now - dt).Seconds < n);
                Console.WriteLine();
            }
        }

  • 相关阅读:
    zeplin使用教程
    如何卸载命令行全局安装的包
    webstrom快捷键
    更新npm至最新版本
    mac环境下安装react项目环境
    横向滚动条布局
    JAVA语法基础——动手动脑
    JAVA语言课堂测试
    暑假第八周进度报告
    暑假第七周进度报告
  • 原文地址:https://www.cnblogs.com/han1982/p/4067935.html
Copyright © 2011-2022 走看看