C# - 委派:初学者的友好指南
你好啊,未来的编程巨星!今天,我们将要深入探索 C# 委派的迷人世界。如果你之前从未听说过它们,不用担心——在本教程结束时,你将成为委派高手!让我们一起踏上这段激动人心的旅程。
委派是什么?
想象你在组织一个派对,需要有人来负责音乐。你自己不做,而是将这个任务委派给你的DJ朋友。在 C# 中,委派的工作方式与此类似——它们就像是我们用来持有和调用方法的小使者。
用更简单的术语来说,委派是一种类型,它代表了对具有特定参数列表和返回类型的方法的引用。你可以将其视为一个方法的蓝图。
声明委派
让我们先学习如何声明一个委派。语法非常简单:
public delegate void SimpleDelegate();
这声明了一个名为 SimpleDelegate
的委派,它可以引用不接收参数且不返回任何内容(void)的方法。
下面是另一个例子:
public delegate int MathDelegate(int x, int y);
这个 MathDelegate
可以引用任何接收两个整数并返回一个整数的方法。
实例化委派
现在我们已经声明了委派,来看看如何使用它们。我们将从一个与方法签名匹配的方法开始:
public static void SayHello()
{
Console.WriteLine("Hello, Delegates!");
}
// 实例化委派
SimpleDelegate greet = new SimpleDelegate(SayHello);
// 调用委派
greet();
运行此代码将输出:"Hello, Delegates!"
让我们分解一下:
- 我们定义了一个匹配
SimpleDelegate
签名的方法SayHello
。 - 我们创建了一个
SimpleDelegate
的实例并将其赋值为SayHello
方法。 - 我们使用
greet()
调用了委派,这反过来又调用了SayHello
。
委派的广播
现在,让我们看看委派真正酷炫的地方。它们可以持有多个方法的引用!这被称为广播。让我们看看它是如何工作的:
public static void SayHello() { Console.WriteLine("Hello"); }
public static void SayGoodbye() { Console.WriteLine("Goodbye"); }
SimpleDelegate greetings = SayHello;
greetings += SayGoodbye;
greetings(); // 这将调用 SayHello 和 SayGoodbye
输出:
Hello
Goodbye
这难道不酷吗?我们将两个方法添加到了我们的委派中,当我们调用它时,两个方法都会按添加顺序被调用。
使用委派
委派在许多场景中都非常有用。一个常见的用途是在事件处理中。让我们看一个简单的例子:
public delegate void TemperatureChangedHandler(float newTemperature);
class Thermostat
{
private float _temperature;
public event TemperatureChangedHandler TemperatureChanged;
public float Temperature
{
get { return _temperature; }
set
{
if (_temperature != value)
{
_temperature = value;
OnTemperatureChanged();
}
}
}
protected virtual void OnTemperatureChanged()
{
if (TemperatureChanged != null)
{
TemperatureChanged(_temperature);
}
}
}
class Program
{
static void Main()
{
Thermostat thermostat = new Thermostat();
thermostat.TemperatureChanged += HandleTemperatureChange;
thermostat.Temperature = 25.5f;
}
static void HandleTemperatureChange(float newTemperature)
{
Console.WriteLine($"Temperature changed to {newTemperature}°C");
}
}
在这个例子中,我们创建了一个 Thermostat
类,它使用委派来通知温度的变化。Main
方法订阅了这个事件,当温度被设置时,它触发了 HandleTemperatureChange
方法。
委派方法
以下是一些常见的与委派相关的方法表格:
方法 | 描述 |
---|---|
Invoke | 调用委派持有的方法 |
BeginInvoke | 开始异步调用委派 |
EndInvoke | 结束异步调用委派 |
GetInvocationList | 返回表示调用列表的委派数组 |
结论
恭喜你!你已经迈出了进入 C# 委派世界的第一步。我们介绍了声明委派、实例化它们、广播以及一个实际的事件处理示例。
记住,委派一开始可能看起来有点抽象,但它们是 C# 中非常强大的工具。它们允许灵活和松散耦合的设计,特别是在事件驱动编程中。
在你继续你的 C# 之旅时,你会找到越来越多的委派用途。它们就像你编程工具包中的瑞士军刀——多功能且在需要时总是很方便。
继续练习,保持好奇心,在你意识到之前,你将像专业人士一样委派任务给代码!快乐编程!
Credits: Image by storyset