首页 > 其他分享 >csharp 发布订阅 传递参数

csharp 发布订阅 传递参数

时间:2024-01-30 14:13:20浏览次数:29  
标签:订阅 定义 void 参数 事件 csharp public MyEvent

event_learn\Program.cs

// 定义一个派生自 EventArgs 的自定义类,用于封装数据
public class MyEventArgs : EventArgs
{
    // 定义一个公共的字符串属性,用于存储和获取数据
    public DateTime? EmitDate { get; set; }
}


// 定义一个发布者类,它有一个 MyEvent 事件
public class Publisher
{
    // 声明一个事件,使用泛型 EventHandler<T> 委托类型,其中 T 是自定义类的类型
    public event EventHandler<MyEventArgs>? MyEvent;

    // 定义一个触发事件的方法
    protected virtual void OnMyEvent(DateTime date)
    {
        // 检查事件是否有订阅者,如果没有,则返回
        if (MyEvent == null) return;

        // 将该实例作为第二个参数传递给事件
        MyEvent(this, new MyEventArgs { EmitDate = date });
    }

    // 定义一个模拟的操作方法
    public void DoSomething()
    {
        // 在这里执行一些操作
        var publishDate = DateTime.Now;
        Console.WriteLine($"Publisher {publishDate}");

        // 在操作完成后,调用触发事件的方法
        OnMyEvent(publishDate);
    }
}

// 定义一个订阅者类,它有一个 HandleEvent 方法,它订阅了 MyEvent 事件
public class Subscriber
{
    // 定义一个事件处理程序方法,使用第二个参数的类型为自定义类的类型
    public void HandleEvent(object sender, MyEventArgs e)
    {
        // 根据数据执行操作,例如打印数据
        Console.WriteLine($"Subscriber:{e.EmitDate} ");
    }
}

class Program
{
    static void Main(string[] args)
    {
        // 创建一个发布者对象
        Publisher publisher = new Publisher();
        // 创建一个订阅者对象
        Subscriber subscriber = new Subscriber();
        // 使用加法赋值运算符 (+=) 来为事件添加事件处理程序
        publisher.MyEvent += subscriber.HandleEvent!;
        // 调用发布者的操作方法,引发事件
        publisher.DoSomething();

    }
}

标签:订阅,定义,void,参数,事件,csharp,public,MyEvent
From: https://www.cnblogs.com/zhuoss/p/17996958

相关文章

  • csharp 发布订阅 设计模式
    event_learn\Program.csusingSystem;//定义一个发布者类,它有一个MyEvent事件publicclassPublisher{//声明一个事件,使用EventHandler委托类型publiceventEventHandlerMyEvent;//定义一个触发事件的方法protectedvirtualvoidOnMyEvent()......
  • mybatis 传递参数的7种方法
     文章目录1.第一种方式匿名参数顺序传递参数2.第二种方式使用@Param注解3.使用Map传递参数4.用过javabean传递多个参数5.直接使用JSON传递参数6.传递集合类型参数List、Set、Array7.参数类型为对象+集合在实际开发过程中,增删改查操作都要涉及到请求参数的传递,今天这节就集......
  • D35XB60-ASEMI整流桥D35XB60参数、封装、尺寸
    编辑:llD35XB60-ASEMI整流桥D35XB60参数、封装、尺寸型号:D35XB60品牌:ASEMI封装:GBJ-5最大重复峰值反向电压:600V最大正向平均整流电流(Vdss):35A功率(Pd):芯片个数:4引脚数量:5类型:插件、整流桥正向浪涌电流:450A正向电压:1.05V最大输出电压(RMS):封装尺寸:如图工作温度:-40°C~1......
  • C#(10):传值,输出,引用,数组,具名,可选参数,拓展方法
    传值参数:被调用后并不会更改变量值,改变的是方法中传去的变量值副本,仅影响方法中的参数值,不影响变量本身的值变量以及参数指向的是地址,方法调用后参数中重新指向新对象地址,将原来引用的变量对象地址丢弃,重新创建新对象地址  getHashcode方法,获取内存中的对象的has......
  • 如何使用保留可探测字段参数的方法解决视频监控管理平台EasyCVR无法启动的问题
    有用户反馈,在使用EasyCVR时出现启动失败,服务无法使用的情况。收到用户反馈后,技术人员立即开展解决,以下为解决步骤:注:此解决方法为保留hardware_version可被探测的字段参数。1、首先查看报错日志:2、由上图可见,报错为LocalMachineCheckError!本地机器检查错误!随后检查配置文件,是否因......
  • 如何使用保留可探测字段参数的方法解决视频监控管理平台EasyCVR无法启动的问题
    安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力,也具备接入AI智能分析的......
  • MT6789(G99)性能参数/datasheet_MTK联发科4G处理器
    联发科MT6789将4G智能手机带入下一代。基于高效率的台积电N6(6nm级)芯片生产工艺,该芯片可全天候实现出色的游戏,加上大摄像头,快速显示,流畅的流媒体和可靠的全球连接。合作伙伴可以定制联发科HelioG99平台,以满足其设备或市场的特定要求。与天玑700相比,MT6789去掉了5G基带。它采用八......
  • 为什么button command 不需要lambda函数添加参数 但是 bind 需要
    combo=tk.ttk.Combobox(frame_combo,values=self.lis,width=25,font=("MicrosoftYaHei",20))combo.pack(side='top',anchor="nw")combo.set("请选择功能")combo.option_add("*TCombobox*......
  • tar中的参数 cvf,xvf,cvzf,zxvf的使用
    tar中的参数cvf,xvf,cvzf,zxvf的使用:https://blog.csdn.net/adminsheery/article/details/127491059?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170650878916800182140677%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=1706508......
  • 新来的一个同事,把SpringBoot参数校验玩的那叫一个优雅
    介绍在开发现代应用程序时,数据验证是确保用户输入的正确性和应用程序数据完整性的关键方面。SpringBoot提供了强大的数据验证机制,使开发者能够轻松地执行验证操作。本文将深入介绍SpringBoot中的Validation,以及如何在应用程序中正确使用它。为什么使用数据验证?1.用户输......