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