C# 委托(Delegate)

· 约 6 分钟读完 · 第 33 / 39 章

在本章中,我们将深入探讨 C# 中的委托(Delegate)概念。委托是 C# 中一种非常重要的类型,它允许我们传递方法作为参数,并且可以用来表示回调方法。委托的使用使得代码更加灵活和可重用。

什么是委托?

委托是一种引用类型,用于封装具有特定签名的方法。换句话说,委托是对方法的抽象,它可以被赋值给一个变量或作为参数传递给其他方法。委托使得我们可以像处理数据一样处理方法,从而实现了方法的动态绑定。

基础示例

让我们通过一个简单的例子来理解委托的基本概念:

在这个例子中,SimpleDelegate 是一个自定义的委托类型,它的签名与 SayHello 方法一致。我们创建了一个 SimpleDelegate 类型的实例,并将它指向了 SayHello 方法,然后调用了这个委托。

委托的签名

委托的签名决定了它可以引用的方法的类型。签名包括返回类型和参数列表。下面是一个更复杂的委托示例,它接受两个整数并返回它们的和:

在这个例子中,MathOperation 委托定义了一个接受两个整数并返回一个整数的方法签名。我们创建了一个 MathOperation 类型的实例,并将其指向 AddNumbers 方法,然后通过这个委托调用了该方法。

多播委托

多播委托是指一个委托实例可以引用多个方法。当调用一个多播委托时,所有被引用的方法都会按顺序执行。多播委托使用 + 或 -= 操作符来添加或移除方法。

示例

在这个例子中,我们创建了一个 MultiCastDelegate 委托实例,并使用 += 操作符向其中添加了三个方法。当我们调用这个委托时,这三个方法会依次执行。

内置委托类型

除了自定义委托外,C# 还提供了一些内置的委托类型,如 Action, Func 和 Predicate。这些内置委托类型提供了更简洁的方式来处理常见的方法签名。

Action 委托

Action 委托用于没有返回值的方法。根据参数的数量,有多种 Action 类型,例如 Action, Action<T>, Action<T1,T2> 等。

Func 委托

Func 委托用于有返回值的方法。同样地,根据参数的数量,有多种 Func 类型,例如 Func<T>, Func<T1,T2,TResult> 等。

Predicate 委托

Predicate 委托用于布尔返回值的方法,通常用于条件判断。

总结

通过本章的学习,你应该对 C# 中的委托有了深入的理解。委托不仅可以帮助我们更好地组织代码,还极大地增强了代码的灵活性和可重用性。无论是在事件处理还是异步编程中,委托都扮演着重要的角色。希望你能够利用这些知识来解决实际问题,并在项目中合理应用委托。