委托
在C#中,委托是一种类型,它安全地封装方法的签名和引用。
类似其他语言
委托类似于C或C++中的函数指针,但委托是类型安全的,并且是面向对象的。
委托的应用场景
委托特别用于实现事件和回调函数。
如何理解
理解委托的最简单方式是将它们视为能够指向具有特定签名的方法的变量。
一旦委托被赋值(即指向某个方法),它就可以像调用普通方法一样被调用,但实际上是调用它所指向的方法。
下面是一个简单的C#委托示例:
using System;
// 定义委托类型
public delegate int BinaryOperation(int x, int y);
class Program
{
static void Main(string[] args)
{
// 创建委托实例并指向Add方法
BinaryOperation add = new BinaryOperation(Add);
Console.WriteLine("10 + 20 = {0}", add(10, 20));
// 创建委托实例并指向Subtract方法
BinaryOperation subtract = new BinaryOperation(Subtract);
Console.WriteLine("20 - 10 = {0}", subtract(20, 10));
}
// 与委托类型匹配的方法
static int Add(int x, int y)
{
return x + y;
}
static int Subtract(int x, int y)
{
return x - y;
}
}
在这个示例中,我们首先定义了一个名为BinaryOperation的委托类型,它接受两个整数参数并返回一个整数。
然后,在Main方法中,我们创建了两个BinaryOperation类型的委托实例:add和subtract。
add委托指向Add方法,而subtract委托指向Subtract方法。
当我们调用这些委托时,实际上是调用了它们所指向的方法。
多播(multicast)特性
值得注意的是,委托可以指向多个方法,这称为委托的多播(multicast)特性。
当调用多播委托时,会按照它们被添加的顺序依次调用所有方法。
这可以通过使用+=运算符将方法添加到委托列表中来实现。例如:
BinaryOperation multiOp = null;
multiOp += Add;
multiOp += Subtract;
Console.WriteLine("10 + 20 - 10 = {0}", multiOp(10, 20)); // 输出 20
在这个例子中,multiOp委托首先调用Add方法,然后调用Subtract方法,所以最终输出结果为20。