在 C# 中编写自定义事件访问器
介绍
为了理解自定义事件访问器,我们需要阐明为什么需要它们以及如何使用它们。在本指南中,我们将介绍事件的概念,然后了解如何使用事件及其访问器在类之间进行交互。在 C# 中,典型的例子是Windows 窗体或Web 应用程序。
活动
让我们来看一个实际的例子。我们有一个 GUI(图形用户界面)应用程序,它由按钮、文本框等组成。每个组件都由自己的类组成,每个类都提供一项功能 — 例如,按下按钮会向 Web 应用程序发送通知或调用计算机上的本地应用程序。事件是这一切的核心。我们按发布者或订阅者对类进行分类。发布者是发送或引发事件的类,订阅者接收事件并根据事件采取特定操作。
活动规则
举办活动时需牢记以下几条规则:
- 发布者决定何时引发事件。
- 订阅者决定在触发特定事件时采取什么行动。
- 没有订阅者的事件永远不会被引发。
- 事件大多是由于用户交互而触发的,无论是在 Web 应用程序还是 GUI 应用程序上。
- 默认情况下,具有多个订阅者的事件会同步调用其处理程序,除非以异步方式定义。
- 这些事件基于 EventHandler委托和 EventArgs基类。
活动创建步骤
- 创建一个委托,它保存事件订阅者的详细信息。
- 创建一个对类外部可见的公共事件,并用于创建订阅。
- 在类中创建方法,它将触发事件本身。
自定义事件处理程序
我认为最好用机甲机器人示例来演示这一点,其代码如下所示。
using System;
namespace Pluralsight
{
public class Machine
{
private int _utilization = 0;
private int _safeutil = 70;
public delegate void StressLimitExceededEventHandler(object source, EventArgs e);
public event StressLimitExceededEventHandler StressLimitExceeded;
public virtual void OnStressLevelExceeded(EventArgs e)
{
StressLimitExceeded?.Invoke(this, e);
}
public int Performance
{
get
{
return _utilization;
}
}
static void MachineStressLimitExceeded(object source, EventArgs e)
{
Machine mechabot = (Machine)source;
Console.WriteLine("Stress level warning ({0} %)", mechabot.Performance);
}
public void StressTest(int utilization)
{
int oldUtilization = _utilization;
_utilization += utilization;
if (oldUtilization <= _safeutil && _utilization > _safeutil)
OnStressLevelExceeded(new EventArgs());
}
public static void Main()
{
Machine mechabot = new Machine();
mechabot.StressLimitExceeded += new StressLimitExceededEventHandler(MachineStressLimitExceeded);
Console.WriteLine($"The utilization is {mechabot.Performance} %");
mechabot.StressTest(60);
Console.WriteLine($"The utilization is {mechabot.Performance} %");
mechabot.StressTest(15);
Console.WriteLine($"The utilization is {mechabot.Performance} %");
Console.ReadKey();
}
}
}
执行代码产生以下输出。
The utilization is 0 %
The utilization is 60 %
Stress level warning (75 %)
The utilization is 75 %
让我们剖析一下这个例子。Main ()函数是整个演示的驱动力。我们有一个StressTest函数,它接受一个利用率参数,这将增加 mechabot 的利用率。在这里,我们检查旧的利用率和增加后的利用率是否超过_safeutil,后者设置为70。这里演示了事件处理的最重要概念之一,其中OnStressLevelExceeded在满足条件时触发。我们拥有的委托称为StressLimitExceededEventHandler,它负责保存事件订阅者的详细信息。还创建了事件StressLimitExceededEventHandler,它将能够为我们提供订阅。关联的事件方法称为OnStressLevelExceeded,将在触发订阅事件并满足条件时调用。这个类由这个概念粘合在一起,并提供了有关如何创建自己的事件处理程序的充分演示。
结论
在本指南中,您将获得有关事件的简短介绍以及创建事件的一些一般规则和步骤。然后,Machine类演示了如何将概念结合在一起以及如何将事件处理程序合并到您的应用程序中。我希望这对您有所帮助,并感谢您阅读它。
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~