ReC# : 事件

作者: 伪犬儒李长歌 | 来源:发表于2017-08-15 12:05 被阅读0次

事件是什么?

举个简单的例子:有一家报纸公司,它有两个客户需要它不断提供新的新闻报道。每当报纸公司的新闻更新的时候,它便会通知各个用户,用户接受了通知之后开始去查看新的新闻。
这个例子中,报纸公司相当于事件的发布者,而两个用户则是订阅者,发布者通过发布“新闻的更新”这个事件,订阅者收到该事件的发生,并开始事件处理程序。

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

namespace ReEvent
{
    delegate void Handler();//声明一种委托类型供事件使用

    class NewspaperCompany {
        private string massage;
        public event Handler NewMassage;
        public string Massage
        {
            get
            {
                return massage;
            }
            set
            {
                InFormUser();//当新闻更新时候,触发事件
                massage = value;
            }
        }

        void InFormUser() {
            if(NewMassage != null)
            {
                NewMassage();
            }
        }
    }

    class Person1 {
        public Person1(NewspaperCompany nc)
        {
            nc.NewMassage += GetNews;//事件的注册
        }

        void GetNews()//事件发生是响应的程序
        {
            Console.WriteLine("{0}  get news", this.GetType().Name);
        }
    }

    class Person2
    {
        public Person2(NewspaperCompany nc)
        {
            nc.NewMassage += GetNews;
        }

        void GetNews()
        {
            Console.WriteLine("{0}  get news", this.GetType().Name);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            NewspaperCompany NC = new NewspaperCompany();
            Person1 p1 = new Person1(NC);
            Person2 p2 = new Person2(NC);
            NC.Massage = "Update";
        }
    }
}

事件:事件是用于某种特殊用途的简单委托。
每个事件中都包含这一个被封装的委托,事件提供了“注册” “移除”这两种操作来与外界联系。

事件的声明

class Incrementer{
  public event EventHandler MyEvent;
// public + 关键字 + 委托类型 + 事件名
}

事件是类或结构的成员,它必须声明在类或者结构中,和其他成员一样。不能在一段可执行的代码中声明事件。

订阅事件

订阅者想事件添加事件处理程序的过程。对于一个要添加到事件的事件处理程序来说,它必须具有与事件的委托相同的返回类型和签名。
使用 += 运算符来为事件增加事件处理程序。

incrementer.MyEvent += EventProcessing;
//发布事件的类.事件成员 += 实例方法/静态方法;

触发事件

if(MyEvent != null)  //确认有方法可执行
      MyEvent (参数列表); //触发事件

待补充

相关文章

  • ReC# : 事件

    事件是什么? 举个简单的例子:有一家报纸公司,它有两个客户需要它不断提供新的新闻报道。每当报纸公司的新闻更新的时候...

  • ReC# :委托

    委托,什么是委托? Delegate 是一种可用于封装命名方法或匿名方法的引用类型。 上面的解释阐明了一个概念:1...

  • ReC# : 多态插曲

    从零系列的插曲,前天被问到了一个这样的问题:如何用父类实例去调用子类方法。恕我当时学业不精对多态认识还是不到位,今...

  • ReC#:泛型01

    这个系列没有先后顺序,主要是为了加深自己的理解,通过这样记录自己也会在过程中去产生跟多的思考。从零开始的学习,就借...

  • JavaScript事件01——事件流

    大纲:概念(事件、事件流)事件流模型(事件冒泡、事件捕获、DOM事件流) 一、概念: 1、事件:事件就是用户或浏览...

  • 事件对象,事件监听,事件冒泡,事件代理

    一、事件对象 二、冒泡事件:(事件从子元素往父级元素向上触发事件)处理兼容问题:主流浏览器:e.stopPropa...

  • 事件总结

    DOM事件主要内容 事件流 事件注册 事件对象 事件分类 事件代理 什么是DOM事件? 事件是某个行为或者触发,比...

  • Javascript事件系统

    本文内容 事件基础 事件监听方式 事件默认行为 事件冒泡与事件捕获 事件绑定与事件委托 事件基础 注意:本文不会深...

  • Javascript事件-事件冒泡,事件捕获,事件监听和事件委托

    事件处理机制 (一)DOM事件流 DOM模型是一个树形结构,在DOM模型中,HTML元素是有层次的。当一个HTML...

  • 【事件】事件流

    1、JavaScript和HTML之间的交互通过事件实现的。2、事件流描述的是从页面中接收事件的顺序。3、IE 和...

网友评论

    本文标题:ReC# : 事件

    本文链接:https://www.haomeiwen.com/subject/bksmrxtx.html