委托是一种类型,表示对具有特定参数列表和返回类型的方法的引用。 实例化委托时,可以将委托实例与具有兼容签名和返回类型的任何方法相关联。 可以通过委托实例来调用(或执行)该方法。
委托用于将方法作为参数传递给其他方法。 事件处理程序本质上是通过委托调用的方法。 创建自定义方法时,Windows 控件等类可以在发生特定事件时调用方法。
以下示例演示委托声明:
public delegate int PerformCalculation(int x, int y);
可以从与委托类型匹配的任何可访问类或结构中分配任何方法。 该方法可以是静态方法,也可以是实例方法。 通过灵活性,你可以以编程方式更改方法调用,或将新代码插入现有类。
注释
在方法重载的上下文中,方法的签名不包括返回值。 但在委托的上下文中,签名包括返回值。 换句话说,方法必须具有兼容的返回类型作为委托声明的返回类型。
将方法作为参数进行引用的能力使委托成为定义回调方法的理想选择。 可以编写一个方法来比较应用程序中的两个对象。 然后该方法可用在排序算法的委托中。 由于比较代码与库不同,因此排序方法可能更常规。
函数指针支持类似的方案,其中你需要对调用约定有更多的控制。 通过使用添加到委托类型的虚拟方法来调用与委托关联的代码。 使用函数指针时,可以指定不同的约定。
了解委托特征
代表具备以下特征:
- 委托允许将方法作为参数进行传递。
- 委托可用于定义回调方法。
- 委托可以链接在一起,例如在单个事件上调用多个方法。
- 方法不必完全匹配委托类型。 有关详细信息,请参阅使用委托中的变体。
- Lambda 表达式是编写内联代码块的更简洁的方法。 Lambda 表达式(在某些上下文中)可编译为委托类型。 有关 lambda 表达式的详细信息,请参阅 Lambda 表达式。
查看相关文章
要详细了解委托,请参阅以下文章:
访问 C# 语言规范
语言规范是 C# 语法和用法的明确来源。 有关详细信息,请参阅 C# 语言规范中的委托。