C#委托(Delegate)是一种引用类型,它可以用来封装一个或多个方法,并且可以在需要的时候调用这些方法。委托可以看作是函数指针的一种安全版本,在C#中被广泛用于事件处理、回调函数和多线程编程等场景。
委托的声明如下:
delegate void MyDelegate(int x);
上述代码定义了一个名为MyDelegate的委托,该委托可以引用一个带有int类型参数且返回值为void的方法。
委托的使用一般分为三步:
定义委托类型;
创建委托对象,指定要调用的方法;
调用委托对象。
下面是一个简单的示例,演示了委托的基本用法:
using System;
class Program
{
delegate int Calculate(int x, int y);
static int Add(int x, int y)
{
return x + y;
}
static int Subtract(int x, int y)
{
return x - y;
}
static void Main()
{
Calculate calc = Add; // 创建委托对象,指定调用Add方法
int result = calc(5, 3); // 调用委托对象,实际上是调用Add方法
Console.WriteLine(result); // 输出:8
calc = Subtract; // 修改委托对象,指定调用Subtract方法
result = calc(5, 3); // 调用委托对象,实际上是调用Subtract方法
Console.WriteLine(result); // 输出:2
}
}
在上述示例中,定义了一个名为Calculate的委托类型,它可以引用一个带有两个int类型参数且返回值为int的方法。然后创建了两个静态方法Add和Subtract,分别用来进行加法和减法运算。在Main方法中,通过创建委托对象并指定要调用的方法,来实现动态选择要执行的方法。
需要注意的是,委托还支持多播(Multicast)功能,即可以引用多个方法,并按顺序依次调用。这使得委托在事件处理等场景中非常有用。