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

学习资料源于视频: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. 【laravel5.4】vue分页删除

    1.a标签执行ajax删除,后台删除成功后,执行vue分页对象删除对应数据 VUE.js

  2. 原创:微信小程序页面跳转展示缓冲提示

    1.在JS文件中,直接加上下面代码即可: //缓冲提醒 wx.showToast({ title: '加载中', icon: 'loading', duration: 400 })

  3. java获取某个范围内的一个随机数

    一.取模操作 public static void main(String[] args){ for (int i = 1; i <= 20; i++){ int j = i % 11; Sys ...

  4. Everything:速度最快的文件名搜索工具

    http://xbeta.info/everything-search-tool.htm Everything(官网|中文主页|教程)是速度最快的文件名搜索软件.其速度之快令人震惊,百G硬盘几十万个文 ...

  5. oc 调用c语言方法和oc的方法调用

    //c语方的方法 void sayHello(){ printf("Hello OC"); } int main(int argc, char * argv[]) { sayHel ...

  6. go 学习笔记(4) ---项目结构

    go install和go build之争.目前,IDEA插件和LiteIDE都采用了go build.Eclipse插件采用了go install.官方推荐go install方式编译项目,官方项目 ...

  7. Linux vm运行参数 - OOM相关的参数

    一.前言 本文是描述Linux virtual memory运行参数的第二篇,主要是讲OOM相关的参数的.为了理解OOM参数,第二章简单的描述什么是OOM.如果这个名词对你毫无压力,你可以直接进入第三 ...

  8. Tomcat7 catalina.out 日志切割

    安装步骤例如以下: 下载(最新版本号)     #  wget http://cronolog.org/download/cronolog-1.6.2.tar.gz 假设下载不了,直接网上查找,ftp ...

  9. Nodejs 使用 Chrome DevTools 调试 --inspect-brk

    参考链接: https://cnodejs.org/topic/5a9661ff71327bb413bbff5b https://github.com/nswbmw/node-in-debugging ...

  10. app hybrid

    package com.note.testcases; /** * * The MIT License (MIT) * * Copyright (c) 2016 Alejandro Gómez Mor ...