C#委托与事件机制(理解比较简单,大神莫喷)

C#委托与事件机制

事件机制是一个这样的场景:有A、B、C、D四个类,当A有事件FireEvent发生时,B、C、D必须作出相应该反应(即执行相应的方法)。

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

namespace CSharp_Delegate_Event
{
    /**
     * 
     * 类A为供应商,B、C、D为用户
     */
    class A
    {
        //委托对象,为所有注册用户发送消息。
        public delegate void Listers(String msg);

        Listers lis;

        public void FireEvent()
        {
            Console.WriteLine("FireEvent");
            //执行委托,所有注册的方法都会依次执行
            lis("fireEvent");
        }

        //所有要收到FireEvent事件的用户,都要注册
        public void register(Listers l)
        {
            lis += l;
        }
        //取消注册
        public void unRegister(Listers l)
        {
            lis -= l;
        }
    }
    class B
    {
        //当FireEvent事件发生时,B执行doSomething_b方法
        public void doSomething_b(String msg)
        {
            Console.WriteLine("B do some action");
        }
    }
    class C
    {
        //当FireEvent事件发生时,C执行doSomething_c方法
        public void doSomething_c(String msg)
        {
            Console.WriteLine("C do some action");
        }
    }
    class D
    {
        //当FireEvent事件发生时,D执行doSomething_d方法
        public void doSomething_d(String msg)
        {
            Console.WriteLine("D do some action");
        }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            //首先,把new A、B、C、D的实例
            A a = new A();
            B b = new B();
            C c = new C();
            D d = new D();
            //用户B、C、D要注册
            a.register(b.doSomething_b);
            a.register(c.doSomething_c);
            a.register(d.doSomething_d);      
            //当FireEvent事件发生时,就会“自动地”执行B、C、D类上注册时用的方法
            a.FireEvent();

            Console.WriteLine();

            //D用户取消了注册,则当FireEvent发生时,D用户则执行相应的方法
            a.unRegister(d.doSomething_d);
            Console.WriteLine("--------D用户取消了注册后-----------");
            a.FireEvent();
            Console.ReadKey();

        }
    }
}
示例代码下载,不需要下载分的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值