C# 内置委托 细读详解
时间: 2024-09-07 15:04:09 浏览: 61
C#中的委托(Delegate)是一种引用类型,它可以引用具有特定参数列表和返回类型的方法。委托类似于C和C++中的函数指针概念,但是更加安全和功能强大。委托在C#中扮演着非常重要的角色,特别是在事件驱动编程和异步编程中。
委托可以被实例化为一个对象,并且可以绑定一个或多个方法,这些方法需要与委托的签名相匹配。当你调用一个委托时,它会依次调用所有绑定的方法。委托是事件处理的基础。
C#内置了几种标准委托,它们分别对应不同的方法签名,主要包括:
1. Action:无返回值的方法委托,可以有0到16个参数。
2. Func:有返回值的方法委托,可以有0到16个参数。
3. Predicate:总是返回布尔值的方法委托,可以有0到16个参数。
例如,一个无参数无返回值的委托定义如下:
```csharp
public delegate void Action();
```
一个带有一个int参数和返回int的方法的委托定义如下:
```csharp
public delegate int Func<int>();
```
一个带有一个int参数并返回布尔值的委托定义如下:
```csharp
public delegate bool Predicate<int>(int parameter);
```
委托可以支持多播,即同时引用多个方法。你可以通过使用加号(+)运算符来将多个方法绑定到同一个委托对象上,使用减号(-)来解除绑定。
委托的使用示例:
```csharp
public void Greet()
{
Console.WriteLine("Hello, World!");
}
public void Inform()
{
Console.WriteLine("This is an informative message.");
}
// 创建委托实例
Action action = new Action(Greet);
// 绑定第二个方法
action += Inform;
// 调用委托,将依次执行Greet和Inform方法
action();
```
委托是.NET框架中事件模型的基础,也经常用在异步编程中,比如使用`Func<T>`和`Action<T>`作为`Task`的参数。此外,从C# 2.0开始,内置委托的使用在很大程度上被lambda表达式所简化。
阅读全文