C#事件,从童话开始(一)

清澈的小河边有一棵木瓜树。有一天,小兔子来到河边玩,突然听见“咕咚”一声。吓得小兔子赶紧就跑,边跑边喊“咕咚来了!”这时候,森林里的小动物们都听见啦!小羊,小猪,小马,都边跑边喊“咕咚来啦!”

事件的类型是委托。事件由两部分组成,触发器和订阅器。

小兔子听见“咕咚”的声音,触发了所有小动物的呼喊。

首先定义委托 :

public delegate void GuDongDelegate();

触发器类:

1.在触发器中声明事件,使用event关键字。在protected方法里判断,事件是否为空,否则触发事件。

public class ListeningGudong
{
    public event GuDongDelegate guDongEvent;
    protected virtual void isGuDongComing()
    {
        GuDongDelegate guDong = guDongEvent;
        if(guDong!=null)
        {
            guDong();
        }
     }
}

2.在触发器类中定义方法,用以调用protected方法,而触发事件:
 

public void ListenGudongCome(string name)
{
    Console.WriteLine(name+"听见咕咚来了!");
    isGuDongComing();
}

订阅器类:

1.如果事件被触发,且该对象有订阅事件,则要执行订阅器里面的处理程序:

public class TellOthers
{
    private string Name;
    public ListeningGudong(string name)
    {
        this.Name = name;
    }
    public void animalAction()
    {
        Console.WriteLine(Name+"大喊,快跑呀!咕咚来了!");
    }
}

主程序:

var gudong = new ListeningGudong();//实例化触发器
var xiaotu = new TellOthers("小兔");//实例化订阅器
var xiaozhu = new TellOthers("小猪");
var xiaoyang = new TellOthers("小羊");
var xiaoma = new TellOthers("小马");
gudong.guDongEvent += xiaozhu.animalAction;//订阅事件
gudong.guDongEvent += xiaotu.animalAction;
gudong.guDongEvent += xiaoyang.animalAction;
gudong.guDongEvent += xiaoma.animalAction;
gudong.ListenGudongCome("小兔");//小兔听见,触发事件  

执行结果:

取消订阅,用“-”符号就行,第二次,小羊取消订阅,所以第二次小羊没喊:

            gudong.guDongEvent += xiaotu.animalAction;
            gudong.guDongEvent += xiaozhu.animalAction;        
            gudong.guDongEvent += xiaoyang.animalAction;
            gudong.guDongEvent += xiaoma.animalAction;
            gudong.ListenGudongCome("小兔");
            gudong.guDongEvent -= xiaoyang.animalAction;//取消订阅
            gudong.ListenGudongCome("小兔");

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值