学习笔记:学习了委托和事件的用法。事件是一种特殊的委托,记录下事件从订阅到发布的流程。

学习资料源于视频:http://www.maiziedu.com/course/510-6891/

新建一个Demo项目,新建以下三个类:

  • Server.cs:模拟服务端,推送消息。
  • Client.cs:模拟客户端,订阅消息。
  • Program.cs:模拟控制程序。

Server.cs:

using System;

namespace EventDemo
{
// 定义Event前必须先定义Delegate
public delegate void DelSendMsg(string msg); // 模拟服务端 推送消息
public class Server
{
// 事件是委托的实例对象
public static event DelSendMsg sendMsgEvent; // 服务器端推送消息给客户端的方法
public void SendMsg(string msg)
{
Console.WriteLine("服务器端开始推送消息!"); // sendMsgEvent由客户端初始化,如果它不为空,即表示客户端订阅了该事件
if (sendMsgEvent != null)
{
// 执行委托(执行事件,就是执行它注册的方法)
sendMsgEvent(msg);
}
}
}
}

Client.cs:

using System;

namespace EventDemo
{
// 表示手机客户端 订阅消息推送事件
class Client
{
// 订阅事件:客户端订阅服务端推送消息的功能
public void Subscription()
{
Console.WriteLine("客户端订阅了推送事件!");
Server.sendMsgEvent += Server_sendMsgEvent; // 实例化,给事件绑定方法
} private void Server_sendMsgEvent(string msg)
{
Console.WriteLine("客户端接收到的推送消息:" + msg);
}
}
}

Program.cs:

namespace EventDemo
{
// 模拟控制程序
public class Program
{
static void Main(string[] args)
{
Client client = new Client();
Server server = new Server(); // 客户端订阅消息
client.Subscription();
// 服务端推送消息
server.SendMsg("我就是推送的消息!");
}
}
}

最后运行结果如下:


关于事件Event和代理/委托Delegate的区别:

【C#】Event事件的订阅和发布的更多相关文章

  1. C#中的事件的订阅与发布

    认识发布者/订阅者模式 发布者定义一系列事件,并提供一个注册方法: 订阅者向发布者注册自己的事件处理逻辑,供一个可被回调的方法,也就是事件处理程序:当发布者的事件被触发的时候,订阅者将通过回调函数得到 ...

  2. VB.net Wcf事件广播(订阅、发布)

    这篇东西原写在csdn.net上,最近新开通了博客想把零散在各处的都转移到一处.   一.源起 学WCF有一段时间了,可是无论是微软的WebCast还是其他网上的教程,亦或我购买的几本书中,都没有怎么 ...

  3. 领域驱动模型DDD(二)——领域事件的订阅/发布实践

    前言 凭良心来说,<微服务架构设计模式>此书什么都好,就是选用的业务过于庞大而导致代码连贯性太差,我作为读者来说对于其中采用的自研框架看起来味同嚼蜡,需要花费的学习成本实在是过于庞大,不仅 ...

  4. [.NET] C# 知识回顾 - Event 事件

    C# 知识回顾 - Event 事件 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6060297.html 序 昨天,通过<C# 知识回顾 - ...

  5. Event 事件

    事件是建立在委托的基础之上的. http://www.cnblogs.com/lystory/p/5085786.html public class 事件参数 { public 事件参数(string ...

  6. CDI(Weld)高级<4> Event(事件) (转)

    目录[-] 1. Event payload(事件的有效载入) 2. Event observers(event的观察者) 3. Event producers(event生产者) 4.Annotat ...

  7. Redis实战——Redis的pub/Sub(订阅与发布)在java中的实现

    借鉴:https://blog.csdn.net/canot/article/details/51938955 1.什么是pub/sub Pub/Sub功能(means Publish, Subscr ...

  8. (尚032)Vue_案例_消息订阅与发布(组件订阅与发布(PubSubJS库))

    组件订阅与发布(PubSubJS库) npm info pubsub-js 安装库 npm install --save pubsub -js ============================ ...

  9. C#中的委托、事件及事件的订阅

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

随机推荐

  1. 更新开源库到pods上时报CocoaPods was not able to update the `master` repo的解决办法

    今天在更新我的开源库到pods上时,使用以下命令时,报错了... pod trunk push SwiftPopMenu.podspec 错误内容: CocoaPods was not able to ...

  2. 【LeetCode】39. Combination Sum (2 solutions)

    Combination Sum Given a set of candidate numbers (C) and a target number (T), find all unique combin ...

  3. 【LeetCode】37. Sudoku Solver

    Sudoku Solver Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are i ...

  4. python学习笔记013——内置函数dir()

    1 描述 dir() 函数 不带参数时,返回当前范围内的变量.方法和定义的类型列表: 带参数时,返回参数的属性.方法列表. 如果参数包含方法__dir__(),该方法将被调用. 如果参数不包含__di ...

  5. 什么是BGP线路?什么是BGP机房?

    BGP(Border Gateway Protocol,边界网关协议)主要用于互联网AS(自治系统)之间的互联.BGP的最主要功能在于控制路由的传播和选择最好的路由.BGP是Internetproje ...

  6. navicat 快速复制表所有字段

    查询-新建查询-查询创建工具-选择表-全选字段-查询编辑器

  7. Java的spi介绍和简单应用

    1.什么是java的spi SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制. 目前有不少框架用它来做服务的扩展发现, 简单来说,它就是一 ...

  8. k8s-configmap

    一.目的 把应用的代码和配置分开,通过配置configmap管理pod,一种统一的集群配置管理方案.ConfigMap API资源提供了将配置数据注入容器的方式,同时保持容器是不知道Kubernete ...

  9. HDU 2256 Problem of Precision(矩阵高速幂)

    题目地址:HDU 2256 思路: (sqrt(2)+sqrt(3))^2*n=(5+2*sqrt(6))^n; 这时要注意到(5+2*sqrt(6))^n总能够表示成an+bn*sqrt(6); a ...

  10. Apply Bug10010310 On Oracle RAC 10.2.0.5

    9月24日数据库上频繁出现例如以下错误 Errors in file /u04/admin/njord/udump/njord_ora_25895.trc: ORA-27300: OS system ...