日常生活的交流与学习

首页 新随笔 联系 管理

event_learn\MyEvent.cs


namespace MyEvent;


public delegate void MyEventHandler(object sender, EventArgs e);


// 定义一个自定义的事件接口,包含一个事件声明
public interface IMyEvent
{
    // 使用 event 关键字声明一个事件,指定委托类型和事件名称
    event MyEventHandler MyEvent;
}

event_learn\Program.cs

// 定义一个实现事件接口的类
using MyEvent;

public class MyPublisher : IMyEvent
{
    // 声明一个与事件接口中相同名称和类型的事件
    public event MyEventHandler? MyEvent;

    // 定义一个触发事件的方法
    protected virtual void OnMyEvent()
    {
        // 检查事件是否有订阅者,如果有,就调用它们,并传递一个包含事件信息的对象
        MyEvent?.Invoke(this, EventArgs.Empty);
    }

    // 定义一个模拟的操作方法
    public void DoSomething()
    {
        // 在这里执行一些操作
        Console.WriteLine("Publisher: do something ... ");
        // 在操作完成后,调用触发事件的方法
        OnMyEvent();
    }

}


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


class Program
{
    static void Main()
    {
        var publisher = new MyPublisher();
        var subscriber = new Subscriber();
        publisher.MyEvent += subscriber.HandleEvent!;
        publisher.DoSomething();

    }
}







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