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