关于委托
委托是引用类型的一种,表示对具有特定参数列表和返回类型的方法的引用。它使用关键字 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.Action 和 System.Func 两种类型,为许多常见委托提供了通用实现。
如果需要以不安全的方式调用方法,或者需要更进一步地控制调用,可以使用函数指针。
Reference Links
- Delegates - C# Programming Guide - C# | Microsoft Learn
- Using Delegates - C# Programming Guide - C# | Microsoft Learn
- Built-in reference types - C# reference - C# | Microsoft Learn
See also
- When to Use Delegates Instead of Interfaces (C# Programming Guide) | Microsoft Learn
- Using Variance in Delegates (C#) - C# | Microsoft Learn
- Delegates with Named vs. Anonymous Methods - C# Programming Guide - C# | Microsoft Learn
- How to combine delegates (Multicast Delegates) - C# Programming Guide - C# | Microsoft Learn
- How to declare, instantiate, and use a delegate - C# Programming Guide - C# | Microsoft Learn
- Chapter 9. Delegates, Events, and Lambda Expressions | Microsoft Learn
- Chapter 17. Delegates and Events | Microsoft Learn
Footnotes
-
对于委托,方法的签名包括访问级别(public、protected 等)+可选修饰符+返回值+方法名(+方法参数)。 ↩