C# 事件:初学者的指南
你好,有抱负的程序设计师!今天,我们将深入探索 C# 事件的精彩世界。作为你友善的邻里电脑教师,我将在这一旅程中逐步引导你。如果你是编程新手,不用担心——我们将从基础开始,逐步提升。让我们开始吧!
事件是什么?
想象你在一场派对上,等待你的朋友到来。当他们到达时,你想向他们打招呼。在 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
分析
- 我们创建了一个
BankAccount
对象。 - 我们使用
+=
运算符订阅了它的BalanceChanged
事件。 - 我们三次更改了余额。
- 每次余额更改时,我们的
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