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

学习资料源于视频: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. HDUOJ----1263水果

    水果 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submissi ...

  2. 【js】indexOf()

    /** **位置方法indexOf()和lastIndexOf() **这两个方法都接收两个参数:要查找的项和(可选的)表示查找起点位置的索引 **indexOf()方法从数组的开头(位置0)开始向后 ...

  3. VSCode调试Html中的脚本 vscode前端常用插件推荐,搭建JQuery、Vue等开发环境 vsCode 添加浏览器调试和js调试的方法总结 VS Code - Debugger for Chrome调试js

    一.背景 使用Visual Studio Code写了一个简单的Html页面,想调试下其中script标签里的javascript代码,网上查了一通,基本都是复制粘贴或者大同小异的文章,就是要安装De ...

  4. tmux安装

    安装tmux sudo yum -y install tmux 修改tmux配置 cat > /root/.tmux.conf <<EOF set-option -g default ...

  5. jQuery $.extend()使用方法

    $.extend()使用方法总结. jQuery为开发插件提拱了两个方法,各自是: jQuery.fn.extend(object); jQuery.extend(object); jQuery.ex ...

  6. SGU 114. Telecasting station 三分or找中位数

    题目链接点这儿 一開始想都没想...直接上了三分...结果...sample的答案不一样...可是过了...然后又看了看. . . 发现这不就是高中或者初中出过的求中位数的题么. . .直接找到这些的 ...

  7. Mac升级bash到最新版本

    mac自带的bash为3.2版本,而最新的bash是4.9,需要升级了,才能支持关联数组等新特性. 1.brew install bash 2.安装到/usr/local/bin/bash里面.可以通 ...

  8. iOS: 让键盘消失的的4种方法

    转自:http://leopard168.blog.163.com/blog/static/168471844201422121310352/ 在iOS app中,只要用到编辑框(UITextFiel ...

  9. 非常全的linux面试笔试题及答案

    一.填空题:1. 在Linux系统中,以 文件 方式访问设备 .2. Linux内核引导时,从文件/etc/fstab 中读取要加载的文件系统.3. Linux文件系统中每个文件用 i节点来标识.4. ...

  10. [转载] C++的那些事:你真的了解引用吗

    我转载了roony的一篇文章 C++的那些事:你真的了解引用吗 以备以后可以查到. 一.引用的本质是什么 说到引用,一般C++的教材中都是这么定义的: 1.引用就是一个对象的别名. 2.引用不是值不占 ...