关于委托

委托是引用类型的一种,表示对具有特定参数列表和返回类型的方法的引用。它使用关键字 delegate 声明。

委托用于将方法作为参数传递给其他方法。它类似于 C++的函数指针,但它面向对象、 类型安全,且更可靠。因为这个特性,委托成了定义回调方法的绝佳选择。

将委托与命名方法或匿名方法关联就可以实例化委托。在实例化委托时,只要某个方法的签名1与委托兼容(不必完全匹配),它都可以关联到这个委托实例上。然后,就可以通过委托实例激活 (invoke) ——换个说法,调用 (call) ——这些方法。

// An example of create and use delegate
// Declare a delegate
public delegate void Callback(string message);
 
// Create a method for a delegate.
public static void DelegateMethod(string message)
{
    Console.WriteLine(message);
}
 
// Instantiate the delegate.
Callback handler = DelegateMethod;
 
// Call the delegate.
handler("Hello World");

委托是事件的基础。

.NET 中提供了 System.ActionSystem.Func 两种类型,为许多常见委托提供了通用实现。

如果需要以不安全的方式调用方法,或者需要更进一步地控制调用,可以使用函数指针

See also

Footnotes

  1. 对于委托,方法的签名包括访问级别(public、protected 等)+可选修饰符+返回值+方法名(+方法参数)。