日常生活的交流与学习

首页 新随笔 联系 管理

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();

    }
}

posted on 2024-01-30 14:00  lazycookie  阅读(12)  评论(0编辑  收藏  举报