C# Events

Parameter Details

EventArgsT The type that derives from EventArgs and contains the event parameters.

EventName The name of the event.

HandlerName The name of the event handler.

SenderObject The object that’s invoking the event.

EventArguments An instance of the EventArgsT type that contains the event parameters.

事件发生触发某些行为,如鼠标单击,触发Click Event,或者某情况下触发的通知,如价格变化。类可以定义事件并且它们的实例(对象)可以引发这些事件。 例如,一个 Button 可能包含一个当用户单击它时引发的单击事件。事件是由对象发送的通知,用于表示某个动作的发生。 .NET 中的事件遵循观察者设计模式。

引发事件的类称为发布者,接收通知的类称为订阅者。 单个事件可以有多个订阅者。 通常,发布者会在某些操作发生时引发事件。 有兴趣在动作发生时获得通知的订阅者应该注册一个事件并处理它。

在C#中,事件是封装的委托。 它取决于委托。 委托定义订阅者类的事件处理程序方法的签名。

1. 声明事件

先声明一个委托,在使用event关键字声明委托变量。

public delegate void Notify(); // delegate
//Declaring an Event
public class MyTestClass
{
public event Notify ProcessCompleted; // event
}

在上面的示例中,我们声明了一个委托 Notify,然后在 MyTestClass 类中使用“event”关键字声明了委托类型 Notify 的事件 ProcessCompleted。 因此,MyTestClass 类称为发布者。 Notify 委托指定 ProcessCompleted 事件处理程序的签名。 它指定订阅者类中的事件处理程序方法必须具有 void 返回类型并且没有参数。

public void StartProcess()
{
        Console.WriteLine("Process Started!");
        // some code here..
        OnProcessCompleted();
}

 protected virtual void OnProcessCompleted() //protected virtual method
    {
        //if ProcessCompleted is not null then call delegate
       ProcessCompleted?.Invoke();
    }
  

上面,StartProcess() 方法最后调用了 onProcessCompleted() 方法,从而引发了一个事件。 通常,要引发事件,应使用名称 On 定义受保护的虚拟方法。 protected 和 virtual 使派生类能够覆盖引发事件的逻辑。 但是,派生类应始终调用基类的 On 方法,以确保已注册的委托接收事件。

OnProcessCompleted() 方法使用 ProcessCompleted?.Invoke(); 调用委托。 这将调用使用 ProcessCompleted 事件注册的所有事件处理程序方法。订阅者类必须注册到 ProcessCompleted 事件,并使用签名与 Notify 委托匹配的方法进行处理。

2. 注册事件
namespace ConsoleApp
{
    class Program
    {
        //Consume an Event
        static void Main(string[] args)
        {
            MyTestClass test1 = new MyTestClass();
            test1.ProcessCompleted += Test1_ProcessCompleted;//register with an event
            test1.StartProcess();
        }

        private static void Test1_ProcessCompleted()
        {
            Console.WriteLine("Process Completed!");
        }
    }
}

输出:

Process Started!

Process Completed!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

flysh05

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值