欢迎光临
我们一直在努力

c#基础知识合集18 事件

  • 事件的概念

    • 在 C# 中,事件是一种特殊的委托,它为对象间的交互提供了一种发布 – 订阅机制。一个对象(发布者)可以发布事件,其他对象(订阅者)可以注册该事件并在事件触发时执行相应的操作。这有助于实现代码的松散耦合,使得不同模块之间可以通过事件进行通信,而不需要紧密依赖。
  • 事件的定义与声明

    • 定义委托类型:首先需要定义一个委托类型,该委托类型定义了事件处理方法的签名,即参数列表和返回类型。
  • public delegate void MyEventHandler(object sender, EventArgs e);

    • 声明事件:在类中使用 event 关键字声明事件,事件类型为前面定义的委托类型。

    class Publisher
    {
    public event MyEventHandler MyEvent;
    }

  • 事件的触发

    • 在发布者类中,需要有一个方法来触发事件。通常,这个方法会在某个特定条件满足时被调用。
  • class Publisher
    {
    public event MyEventHandler MyEvent;

    public void DoSomething()
    {
    // 模拟一些操作
    Console.WriteLine("Publisher is doing something…");
    // 触发事件
    if (MyEvent!= null)
    {
    MyEvent(this, EventArgs.Empty);
    }
    }
    }

  • 事件的订阅与处理

    • 订阅事件:订阅者类需要创建发布者类的实例,并使用 += 运算符将事件处理方法注册到事件上。
    • 定义事件处理方法:事件处理方法必须与委托的签名一致。
  • class Subscriber
    {
    public void HandleEvent(object sender, EventArgs e)
    {
    Console.WriteLine("Subscriber received the event.");
    }
    }

    class Program
    {
    static void Main()
    {
    Publisher publisher = new Publisher();
    Subscriber subscriber = new Subscriber();

    publisher.MyEvent += subscriber.HandleEvent;

    publisher.DoSomething();
    }
    }

    • MyEventHandler 委托定义了事件处理方法的签名,接受 object 类型的 sender(表示事件的发送者)和 EventArgs 类型的参数(用于传递事件相关的数据,这里使用 EventArgs.Empty 表示不传递额外数据)。
    • Publisher 类声明了一个 MyEvent 事件,并在 DoSomething 方法中触发该事件。
    • Subscriber 类定义了 HandleEvent 方法来处理事件。
    • 在 Main 方法中,创建了 Publisher 和 Subscriber 的实例,将 Subscriber 的 HandleEvent 方法注册到 Publisher 的 MyEvent 事件上,然后调用 publisher.DoSomething() 触发事件,此时 Subscriber 的 HandleEvent 方法会被执行。
  • 使用预定义的委托和事件参数类型

    • C# 提供了一些预定义的委托和事件参数类型,方便使用。例如,EventHandler 委托和 EventArgs 及其派生类。
    • EventHandler 委托的定义为 public delegate void EventHandler(object sender, EventArgs e);,这是一个非常常用的事件委托类型。
    • 当需要传递自定义数据时,可以从 EventArgs 派生一个新的类。例如:
  • public class CustomEventArgs : EventArgs
    {
    public string Message { get; set; }

    public CustomEventArgs(string message)
    {
    Message = message;
    }
    }

    public delegate void CustomEventHandler(object sender, CustomEventArgs e);

    class CustomPublisher
    {
    public event CustomEventHandler CustomEvent;

    public void RaiseCustomEvent()
    {
    if (CustomEvent!= null)
    {
    CustomEventArgs args = new CustomEventArgs("This is a custom message.");
    CustomEvent(this, args);
    }
    }
    }

    class CustomSubscriber
    {
    public void HandleCustomEvent(object sender, CustomEventArgs e)
    {
    Console.WriteLine($"Received custom event with message: {e.Message}");
    }
    }

    class Program2
    {
    static void Main()
    {
    CustomPublisher publisher = new CustomPublisher();
    CustomSubscriber subscriber = new CustomSubscriber();

    publisher.CustomEvent += subscriber.HandleCustomEvent;

    publisher.RaiseCustomEvent();
    }
    }

    在这个示例中,CustomEventArgs 类从 EventArgs 派生,用于传递自定义消息。CustomPublisher 类使用 CustomEventHandler 委托声明 CustomEvent 事件,并在 RaiseCustomEvent 方法中触发事件并传递 CustomEventArgs 实例。CustomSubscriber 类的 HandleCustomEvent 方法接收并处理这个自定义事件和相关数据。

    赞(0)
    未经允许不得转载:171主机测评 » c#基础知识合集18 事件
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址