第507篇-Delegate和Event异同--(内容篇3:共6篇)

一般.NET中的事件申明格式都是:public delegate void PlayGameHandler(object sender, CustomEventArgs e); sender表示事件发起者,e表示事件需要传输入的一些参数.

本文主要讲述一个事件:Zhang在上班中玩游戏(事件),Wang知道了,然后扣张的钱,最后张的钱被扣了.

主要代码逻辑如下:

namespace DelegateEventDemo
{
    class Class1
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Scenario is starting...");
            //生成小账
            Zhang z = new Zhang();
            //Create Zhang
            Wang w = new Wang(z);
            //开始玩游戏
            z.PlayGames();
            Console.WriteLine("Scenario is end..");
            Console.ReadLine();
        }
    }

    public delegate void PlayGameHandler(object sender, CustomEventArgs e);

    /// <summary>
    /// Master
    /// </summary>
    public class Wang
    {
        /// <summary>
        /// Subscribe to the event.
        /// </summary>
        /// <param name="?"></param>
        public Wang(Zhang z)
        {
            // Monitor.
            z.PlayGame += new PlayGameHandler(this.WithDraw);
            Console.WriteLine("Create Wang.");
        }
        public void WithDraw(object sender, CustomEventArgs e)
        {
            Console.WriteLine("Wang:Good, you play games in working time..");
            Console.WriteLine("Wang:Let's check your account.");

            // 获取发起者
            Zhang f = (Zhang)sender;
            Console.WriteLine("Zhang'Money:" + f.Account.ToString());
            Console.WriteLine("Withdraw from Zhang.");
            System.Threading.Thread.Sleep(500);
            f.Account = f.Account - 500;
            Console.WriteLine(string.Format("Get the message: {0},OK,Done, the balance of Zhang is:{1}",e.Message, f.Account.ToString()));
        }
    }

    /// <summary>
    /// Trigger the event when playing games..
    /// </summary>
    public class Zhang
    {
        // Play games..
        public event PlayGameHandler PlayGame;
        /// <summary>
        /// Account
        /// </summary>
        private int m_Money;
        public Zhang()
        {
            Console.WriteLine("Create Zhang.");
            m_Money = 1000;  
        }
        public int Account  
        {
            get
            {
                return m_Money;
            }
            set
            {
                m_Money = value;
            }
        }
        public void PlayGames()
        {
            Console.WriteLine("Zhang is playing games..");
            Console.WriteLine("Zhang:CS is excellent..");
            System.Threading.Thread.Sleep(500);
            CustomEventArgs e = new CustomEventArgs() { Message="This is a message"};
            OnPlayGame(e);
        }
        protected virtual void OnPlayGame(CustomEventArgs e)
        {
            if (PlayGame != null)
            {
                PlayGame(this, e);
            }
        }
    }

    public class CustomEventArgs : EventArgs
    {
        public string Message { get; set; }
    }
}

 运行结果:

posted @ 2013-03-04 17:47  Shanghai Jim Zhou  阅读(184)  评论(0编辑  收藏  举报