设计模式拓展—事件

引用:https://blog.csdn.net/cxu123321/article/details/91368837

1什么是事件

2 怎么用事件

事件的定义:和委托类似,事件是后期绑定机制。 实际上,事件是建立在对委托的语言支持之上的。事件是对象用于(向系统中的所有相关组件)广播已发生事情的一种方式。 任何其他组件都可以订阅事件,并在事件引发时得到通知。(举个例子:小明跟小红说吃完午饭去上网,小红什么时候吃饭不一定,这时候就需要事件,当小红吃完饭,就通知小明去上网)

简单的来说,鼠标移动、点击等等都是一个事件。但并非唯一的情景。可以定义应针对类引发的事件。通过订阅事件,还可在两个对象(事件源和事件接收器)之间创建耦合。 需要确保当不再对事件感兴趣时,事件接收器将从事件源取消订阅。

事件在类中声明且生成,且通过使用同一个类或其他类中的委托与事件处理程序关联。包含事件的类用于发布事件。这被称为 发布器(publisher) 类。其他接受该事件的类被称为 订阅器(subscriber) 类。事件使用 发布-订阅(publisher-subscriber) 模型。

发布器(publisher) 是一个包含事件和委托定义的对象。事件和委托之间的联系也定义在这个对象中。发布器(publisher)类的对象调用这个事件,并通知其他的对象。

订阅器(subscriber) 是一个接受事件并提供事件处理程序的对象。在发布器(publisher)类中的委托调用订阅器(subscriber)类中的方法(事件处理程序)。

2怎么用事件(带参数,不带参数,带返回值,不带返回值)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Sample001
{
    public delegate String InformHandle(object sender);//参数传递位置
    public class JIA
    {
        public event InformHandle EatOver;
        public void eat()
        {
            Console.WriteLine("吃饭中......");
            System.Threading.Thread.Sleep(2000); //吃饭事件两秒
            OnEating();  //这个相当于是一个信号,当运行这个函数的时候会发出一个信号。
        }
        public virtual void OnEating() {
            if (EatOver != null)
            {
               String a =EatOver(this);//返回值获取
            }
        }
    }
 
    public class YI
    {
        public String TakeJiaToWangBa(object sender)
        {
            return "事件返回值";
        }
    }
 
    class Program {
        static void Main(string[] args)
        {
            JIA jia1 = new JIA();
            YI yi1 = new YI();
            jia1.EatOver += new InformHandle(yi1.TakeJiaToWangBa);
            Console.WriteLine("空闲中");
            Console.WriteLine("现在甲不知道在干什么");
            jia1.eat();
            Console.WriteLine("去了网吧通宵一个晚上到了第二天中午");
            jia1.eat();
            Console.ReadKey();
        }
    }
}

总结一下:delegate 声明委托(传递参数以及返回值类型都在这里),event声明事件,新写一个方法作为触发方法,订阅器中接受事件并处理事件,返回值以及参数都在绑定的类中。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值