日期:2014-05-18  浏览次数:20861 次

对《顿悟?!新手浅谈事件与委托》一文中的代码改进
原文请点击:《顿悟?!新手浅谈事件与委托》
首先,委托是在事件发生前就应该定下的计划,一旦事件发生,就开始执行委托好的事情。
这里事先做好委托计划,打电话的话就是让漂亮执行Doit方法帮收衣服。
在这里,“我”每天在那等啊等,Check天气来Check天气去,总算下雨了,赶紧打电话约漂亮MM……啊!不是,赶紧打电话让漂亮MM帮收衣服……
理解得不对的话,轻喷o(╯□╰)o 
C# code

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 收衣服
{
    /// <summary>
    /// 先定义一个委托
    /// </summary>
    public delegate void Mydelegate();

    /// <summary>
    /// 我
    /// </summary>
    class me
    {
        /// <summary>
        /// 打电话求助事件
        /// </summary>
        public event Mydelegate Call;

        /// <summary>
        /// 让我来看一下天气怎么样
        /// </summary>
        /// <param name="weather">天气</param>
        public void CheckWeather(string weather)
        {
            if (weather == "雨")// 下雨?还不赶紧打电话给漂亮MM!!!
            {
                Call();
            }
            else
            {
                Console.WriteLine("没下雨?!唉,还是找别的理由打电话给漂亮MM吧……");
            }
        }
    }
    /// <summary>
    /// 邻居
    /// </summary>
    class Neighbor
    {
        /// <summary>
        /// 邻居还要有一个能处理事件的方法
        /// </summary>
        public void Doit()
        {
            Console.WriteLine("漂亮MM帮我收衣服了!");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            me me = new me();     //实例化一个我
            Neighbor PLMM = new Neighbor();     //假设邻居是一个漂亮MM~
            me.Call += new Mydelegate(PLMM.Doit);// 先定好打电话是要让漂亮执行Doit方法帮收衣服
            int i = 0;
            string weather = "晴";
            while (i < 10)
            {
                if (i++ % 3 == 0)// 虚拟一个下雨的条件
                {
                    weather = "雨";
                    Console.Write("下雨了!!!");
                }
                else
                {
                    weather = "晴";
                }
                me.CheckWeather(weather);
            }
            Console.ReadKey();
        }
    }
}
// 执行结果:
// 下雨了!!!漂亮MM帮我收衣服了!
// 没下雨?!唉,还是找别的理由打电话给漂亮MM吧……
// 没下雨?!唉,还是找别的理由打电话给漂亮MM吧……
// 下雨了!!!漂亮MM帮我收衣服了!
// 没下雨?!唉,还是找别的理由打电话给漂亮MM吧……
// 没下雨?!唉,还是找别的理由打电话给漂亮MM吧……
// 下雨了!!!漂亮MM帮我收衣服了!
// 没下雨?!唉,还是找别的理由打电话给漂亮MM吧……
// 没下雨?!唉,还是找别的理由打电话给漂亮MM吧……
// 下雨了!!!漂亮MM帮我收衣服了!



另外做了一个新例子,但愿新人没误导新人……
C# code

using System;
namespace 收衣服
{
    /// <summary>
    /// 包含事件相关参数的类
    /// </summary>
    public class MyEventArgs
    {
        private Person offerHelpPerson;

        /// <summary>
        /// 提供服务的人
        /// </summary>
        public Person OfferHelpPerson
        {
            get { return offerHelpPerson; }
            set { offerHelpPerson = value; }
        }
        private Person needHelpPerson;

        /// <summary>
        /// 需要服务的人
        /// </summary>
        public Person NeedHelpPerson
        {
            get { return needHelpPerson; }
            set { needHelpPerson = value; }
        }
        private EnmWeather weather;

        /// <summary>
        /// 天气情况
        /// </summary>
        public EnmWeather Weather
        {
            get { return weather; }
            set { weather = value; }
        }

        /// <summary>
        /// 构造方法
        /// </summary>
        /// <param name="offerHelpPerson">提供服务的人</param>
        /// <param name="needHelpPerson">需要服务的人</param>
        /// <param name="weather">天气情况</param>
        public MyEventArgs(Person offerHelpPerson, Person needHelp