C# 事件(Event)
当你需要在程序中进行不同对象之间的通信时,C# 中的事件是一种非常有用的工具。事件使得对象之间可以触发和响应各种操作,例如用户输入、网络请求等。
# 事件的基本概念
事件是一个特殊的委托,它用于通知对象某个操作已经发生或即将发生。事件可以被其他对象订阅,以便在事件发生时被通知。当一个事件被触发时,它会调用所有已经订阅它的委托。
C# 中的事件由以下三个部分组成:
- 事件发布者:该对象定义了事件,当事件发生时,它会通知所有已经订阅该事件的对象。
- 事件参数:事件发生时需要传递的信息,可以是任何类型的对象。如果事件不需要传递参数,则可以使用 EventArgs。
- 事件订阅者:该对象订阅了事件,并在事件发生时执行相应的操作。
# 示例代码
下面是一个示例代码,演示了如何在 C# 中使用事件。在该示例中,我们定义了一个简单的 Calculator 类,它可以对两个数进行加、减、乘、除操作,并在操作完成时触发一个事件。
using System;
public class Calculator
{
// 定义一个事件
public event EventHandler<CalculationEventArgs> CalculationPerformed;
public int Add(int x, int y)
{
int result = x + y;
OnCalculationPerformed(new CalculationEventArgs("add", x, y, result));
return result;
}
public int Subtract(int x, int y)
{
int result = x - y;
OnCalculationPerformed(new CalculationEventArgs("subtract", x, y, result));
return result;
}
public int Multiply(int x, int y)
{
int result = x * y;
OnCalculationPerformed(new CalculationEventArgs("multiply", x, y, result));
return result;
}
public int Divide(int x, int y)
{
int result = x / y;
OnCalculationPerformed(new CalculationEventArgs("divide", x, y, result));
return result;
}
protected virtual void OnCalculationPerformed(CalculationEventArgs e)
{
// 调用事件委托
CalculationPerformed?.Invoke(this, e);
}
}
public class CalculationEventArgs : EventArgs
{
public string Operation { get; set; }
public int X { get; set; }
public int Y { get; set; }
public int Result { get; set; }
public CalculationEventArgs(string operation, int x, int y, int result)
{
Operation = operation;
X = x;
Y = y;
Result = result;
}
}
public class Program
{
static void Main(string[] args)
{
Calculator calculator = new Calculator();
// 订阅事件
calculator.CalculationPerformed += OnCalculationPerformed;
int x = 10;
int y = 5;
int result = calculator.Add(x, y);
Console.WriteLine("{0} + {1} = {2}", x, y, result);
result = calculator.Subtract(x, y);
Console.WriteLine("{0} - {1} = {2}", x, y, result);
result = calculator.Multiply(x, y);
Console.WriteLine("{0} * {1} = {2}", x, y, result);
result = calculator.Divide(x, y);
Console.WriteLine("{0} / {1} = {2}", x, y, result);
// 取消订阅事件
calculator.CalculationPerformed -= OnCalculationPerformed;
Console.ReadLine();
}
static void OnCalculationPerformed(object sender, CalculationEventArgs e)
{
Console.WriteLine("{0} {1} {2} = {3}", e.X, e.Operation, e.Y, e.Result);
}
}
在上面的示例代码中,我们定义了一个 Calculator 类,它包含四个计算方法:Add、Subtract、Multiply 和 Divide。每次调用这些方法时,它们都会触发 CalculationPerformed 事件,并传递一个 CalculationEventArgs 对象作为事件参数。在示例中,我们订阅了 CalculationPerformed 事件,并在事件触发时打印出计算结果。最后,我们取消了对事件的订阅。
总的来说,使用 C# 中的事件可以让你的代码更加模块化和可维护。事件使得不同对象之间的通信变得更加容易,使得你可以更好地处理应用程序中的各种操作和事件。
上次更新: 2023/04/26, 22:10:06