博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#事件-支持发布者/订阅者模式
阅读量:5303 次
发布时间:2019-06-14

本文共 1213 字,大约阅读时间需要 4 分钟。

C#事件支持发布者/订阅者模式,发布者将事件通知给订阅者,而订阅者在事件发生时调用已经注册好的事件处理函数。

首先要在一个类中定义某种类型的委托和此种委托类型事件。然后在该类中通过一个函数,将该事件进行触发。 当外部其他类有对该事件订阅时候,其他类会转去处理该事件的处理程序。从而完成信息的交流。这样做,一个最大的好处就是事件触发类不用关心该事件的所有处理程序,只关心他自己的工作以及他所关心的事件即可。而对该事件感兴趣的类会首先订阅该事件,当该事件发生时会捕捉到事件信息,并转去处理。

举一个简单的例子 有两个类,机器mechine类,和维修工check类。mechine类在运行过程当中如果出现某种故障,他会抛出brokendown()信息。如果check类对该事件有订阅,他会捕捉到该信息然后转去心相应的处理程序。

using System;

class Mechine                                  //定义一个发布者类

{
public delegate void delegateName(string name); //定义具有某种返回类型命令参数代理类型
public event delegateName eventName;   //定义委托类型的事件
public void Fun()
{
    if (eventName != null)               //如果事件不等于空就是说有订阅者注册过该事件,也就是说触发事件后有相应的事件处理函数被调用。
    {
      Console.WriteLine("报告,机器已经出现故障");
      eventName(string _name);           //在类中触发该事件
    }
}
}

class Check                              //有订阅上述事件的类

{
public void Fix(string str)
{
    Console.WriteLine("请让"+str+"去进行修理");
}

}

class Program

{
static void Main()
{
    Mechine mechine1 = new Mechine(); //实例化一个Mechine类
    Check c1 = new Check();
    mechine1.eventName += new Mechine.delegateName(c1.Fix);
    //用当前类中Fix函数订阅mechine类中eventName函数,注意这里Fix的函数结构要跟事件和代理的委托要相同(形参以及返回值全部相同),这样当Mechine类中事件触发时,系统会通知Check类转到Fix函数。

    Mechine.Fun("张三");

}
}
具体使用方法过程如下:
1.委托定义delegate
2.事件定义 event
3.事件触发
4.事件订阅以及处理

转载于:https://www.cnblogs.com/tanding/archive/2012/06/28/2567046.html

你可能感兴趣的文章
Linux内核分析——第二周学习笔记
查看>>
windows基本命令
查看>>
Qt图片显示效率的比较(转)
查看>>
VMware中CentOS设置静态IP
查看>>
剑指Offer_编程题_7
查看>>
js 变量大小写
查看>>
Linux系统的启动原理
查看>>
JDesktopPane JInternalFrames
查看>>
错误The request sent by the client was syntactically incorrect ()的解决
查看>>
Java基础知识学习(九)
查看>>
redis在windows下总是报错,就是下面的错误,这是哪里出错了
查看>>
Asp.net窄屏页面 手机端新闻列表
查看>>
Linux 密钥验证
查看>>
windows下UDP服务器和客户端的实现
查看>>
NetAdvantage webdatagrid 控件的一些属性
查看>>
MySQL各版本的区别
查看>>
[poj1006]Biorhythms
查看>>
迭代器
查看>>
elasticsearch type类型创建时注意项目,最新的elasticsearch已经不建议一个索引下多个type...
查看>>
jQury 跳出each循环的方法
查看>>