• 【C#】Event事件的订阅和发布


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

    学习资料源于视频: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的区别:

  • 相关阅读:
    L1和L2正则
    Python基础(一)
    消息分发
    StringList 自定义快速排序
    Delphi Length函数
    接口的委托实现(通过接口)
    接口委托实现--通过类的对象
    排序
    Socket编程(摘抄)
    Delphi线程同步
  • 原文地址:https://www.cnblogs.com/guxin/p/csharp-how-to-use-event.html
Copyright © 2020-2023  润新知