委托与事件(老板和助理)

在c#里面委托就像函数指针,在程序运行时,可以用委托调用不同的方法。

委托是一种方法的引用类型,一旦委托分配了方法,委托将与该方法具有相同的行为。

事件则是委托的一种特殊形式,当事件发生有意义的事情时,事件对象处理通知过程。


下面用老板和助理的例子介绍一下

Case1:公司老板每隔一段时间需要去海外出差,和国外的公司恰然合作事宜,出差前,老板会通知他的助理安排一下他给的列表里面的每件事情,譬如说:中秋快来了,需要人事派发中秋福利;需要开发负责人汇报每个礼拜的开发工作.....这些事可以由老板亲自完成,但是老板是大忙人啊,所以就委托他的助理带他完成这些事。这个就和c#里面的委托结合起来了,下面看一下代码


首先是助理类 Assist

    public class Assist
    {
        public void SendMessage(List<string> _listConetnt)
        {
            for (int i = 0; i < _listConetnt.Count; i++)
            {
                Console.WriteLine(_listConetnt[i]);
            }
        }

    }


助理就一个职责 帮老板任务列表里面的消息一一传达


老板类 (Boss)

    public class Boss
    {
        private delegate void messgaeDelegate(List<string> _listContent);
        private List<string> _content = new List<string> { "Task1","Task2","Task3"};

        public void SendMessage()
        {
            messgaeDelegate _delegate = new messgaeDelegate(new Assist().SendMessage);
            _delegate(_content);
        }
    }


老板有一个委托对象和一个任务列表,老板想员工派发任务的时候其实是让他的助理完成的,委托了助理的SendMessage方法。

 客户端的调用


    class Program
    {
        static void Main(string[] args)
        {
            Boss _boss = new Boss();
            _boss.SendMessage();
        }
    }


Case 2:

在老板出差的过程中,老板想起了一些事还没交代,是在任务列表外的,只能通过邮件的形式告诉Boss了,邮件就是一个事件的载体,他帮老板传达了要让助理做的事情

下面看一下代码 比起上面一段代码来 多了一个Mail类

namespace BossAndAssistDemo
{
    public class Boss
    {
        public delegate void MessgaeDelegateByMail(Mail _mail);
        public event MessgaeDelegateByMail MessageEventByMail;

        public void SendMessageByMail()
        {
            Mail _mail = new Mail();
            _mail.Sender = "Boss";
            _mail.Content = "Task008";

            MessageEventByMail(_mail);

        }
    }
}



namespace BossAndAssistDemo
{
    public class Assist
    {
        public Assist(Boss _boss)
        {
            _boss.MessageEventByMail += new Boss.MessgaeDelegateByMail(SendMessageByMail);
        }

        public void SendMessageByMail(Mail _mail)
        {
            if (_mail.Sender.Equals("Boss"))
            {
                Console.WriteLine(_mail.Content);
            }
            else
            {
                Console.WriteLine("不是老板发来的邮件");
            }
        }
    }
}


namespace BossAndAssistDemo
{
    public class Mail:EventArgs
    {
        private string sender;
        public string Sender
        {
            get { return sender; }
            set { sender = value; }
        }

        private string content;
        public string Content
        {
            get { return content; }
            set { content = value; }
        }
    }
}


namespace BossAndAssistDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Boss _boss = new Boss();
            Assist _assist = new Assist(_boss);
            _boss.SendMessageByMail();
        }
    }
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值