C# 事件:初学者的指南

你好,有抱负的程序设计师!今天,我们将深入探索 C# 事件的精彩世界。作为你友善的邻里电脑教师,我将在这一旅程中逐步引导你。如果你是编程新手,不用担心——我们将从基础开始,逐步提升。让我们开始吧!

C# - Events

事件是什么?

想象你在一场派对上,等待你的朋友到来。当他们到达时,你想向他们打招呼。在 C# 中,事件的工作方式类似——它们是一种对象用来通知其他对象当有趣的事情发生时的方法。这就像在你的代码中设置一个“通知系统”。

现实世界的类比

把事件想象成门铃。当有人按门铃(事件)时,你(事件处理程序)通过走向门口来响应。门铃不知道也不关心谁会响应——它只是宣布有人在了门口。

使用委托与事件

在我们深入研究事件之前,我们需要了解委托。别担心;它们并不像听起来那么可怕!

委托是什么?

委托在 C# 中就像中间人。它们持有方法(函数)的引用,并在需要时可以调用这些方法。可以把委托想象成一张高级的商业名片,它不仅包含联系信息,还可以为你打电话!

让我们来看一个简单的委托示例:

public delegate void SimpleDelegate(string message);

class Program
{
static void Main(string[] args)
{
SimpleDelegate d = new SimpleDelegate(ShowMessage);
d("Hello, Delegates!");
}

static void ShowMessage(string message)
{
Console.WriteLine(message);
}
}

在这个示例中,SimpleDelegate 是我们的委托类型。我们创建了一个它的实例(d)并将其与 ShowMessage 方法关联。当我们调用 d("Hello, Delegates!") 时,实际上是在调用 ShowMessage("Hello, Delegates!")

声明事件

现在我们理解了委托,让我们看看事件是如何工作的。事件通常使用委托来声明。以下是其基本语法:

public event DelegateType EventName;

让我们创建一个更实用的示例。想象我们在构建一个简单的银行应用程序:

public class BankAccount
{
private decimal balance;
public delegate void BalanceChangedEventHandler(decimal newBalance);
public event BalanceChangedEventHandler BalanceChanged;

public decimal Balance
{
get { return balance; }
set
{
balance = value;
OnBalanceChanged(balance);
}
}

protected virtual void OnBalanceChanged(decimal newBalance)
{
BalanceChanged?.Invoke(newBalance);
}
}

在这个示例中,我们创建了一个 BankAccount 类,其中有一个 BalanceChanged 事件。每当余额发生变化时,这个事件就会被触发。

示例:将所有内容放在一起

让我们看看如何使用这个 BankAccount 类及其事件:

class Program
{
static void Main(string[] args)
{
BankAccount account = new BankAccount();
account.BalanceChanged += Account_BalanceChanged;

account.Balance = 1000;
account.Balance = 2000;
account.Balance = 500;
}

private static void Account_BalanceChanged(decimal newBalance)
{
Console.WriteLine($"您的新的余额是: ${newBalance}");
}
}

当你运行这个程序时,你将看到:

您的新的余额是: $1000
您的新的余额是: $2000
您的新的余额是: $500

分析

  1. 我们创建了一个 BankAccount 对象。
  2. 我们使用 += 运算符订阅了它的 BalanceChanged 事件。
  3. 我们三次更改了余额。
  4. 每次余额更改时,我们的 Account_BalanceChanged 方法会自动被调用。

这就是事件的魔力!BankAccount 类不需要知道谁在监听它的变化。它只是宣布它们,而任何感兴趣的人都可以监听并作出反应。

常见事件模式

以下是在 C# 中常见的事件模式:

模式 描述 示例
EventHandler 标准事件模式 public event EventHandler MyEvent;
自定义 EventArgs 用于传递自定义数据 public event EventHandler<CustomEventArgs> MyEvent;
事件访问器 用于控制事件访问 public event EventHandler MyEvent { add { ... } remove { ... } }

结论

C# 中的事件是一种强大的方法,用于创建松散耦合、响应快速的应用程序。它们允许对象在不需了解彼此细节的情况下进行通信,就像一个广播电台向所有听众广播一样。

记住,熟能生巧!尝试创建带有事件的自己的类,并尝试不同的场景。在你意识到之前,你将成为一个事件专家,指挥你 C# 应用程序中的对象交响曲!

祝编码愉快,未来的程序员们!??

Credits: Image by storyset