委托事件

本文通过一个具体的C#程序实例,展示了如何使用事件与委托来实现对象间的解耦通信。具体包括自定义事件参数类、事件发布者类及事件订阅者类的设计与交互流程。
class PubEventArgs : EventArgs
    {
        private readonly string _magname;

        public string Magname
        {
            get { return _magname; }
        } 

        public PubEventArgs(string magname)
        {
            _magname = magname;
        }
    }
    class Event//创建事件类
    {
        public delegate void PubComputerEventHandle(object sender,PubEventArgs e);//声明委托
        public event PubComputerEventHandle PubComputer;//创建委托链,即事件
        public delegate void PubLifeEventHandle(object sender, PubEventArgs e);
        public event PubLifeEventHandle PubLife;
        public virtual void OnComputer(PubEventArgs e)
        {
            PubComputerEventHandle handle = PubComputer;
            if (handle != null)
            {
                handle(this,e);
            }
        }
        public virtual void OnLife(PubEventArgs e)
        {
            PubLifeEventHandle handle = PubLife;
            if (handle != null)
            {
                handle(this, e);
            }
        }
        public void IsComputer(string magname)//创建触发事件过程
        {
            Console.WriteLine("发行"+magname+"杂志");
            OnComputer(new PubEventArgs(magname));
        }
        public void IsLife(string magname)
        {
            Console.WriteLine("发行" + magname + "杂志");
            OnComputer(new PubEventArgs(magname));
        }
    }
    class Man//创建操作主体
    {
        public string name;
        public Man(string name)
        {
            this.name = name;
        }
        public void Order(object sender, PubEventArgs e)//在主体中创建被委托的函数
        {
            Console.WriteLine(name + "订阅" + e.Magname + "刊物");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Event e = new Event();//事件建好
            Man zs = new Man("张三");//主体建好
            e.PubComputer += new Event.PubComputerEventHandle(zs.Order);//调用主体的被委托函数
            Man ls = new Man("李四");
            e.PubComputer += new Event.PubComputerEventHandle(ls.Order);
            e.PubLife += new Event.PubLifeEventHandle(ls.Order);
            e.IsComputer("电脑");//触发事件
            e.IsLife("生活");
            Console.Read();
        }
    }

 

转载于:https://www.cnblogs.com/liujianshe1990-/p/5361881.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值