C#委托介绍
在 C# 里,委托是一种引用类型,它能够封装一个或多个方法。委托可以把方法当作参数传递给其他方法,这就使得方法的调用更为灵活。下面从几个方面为你介绍 C# 委托:
1. 声明委托
委托的声明和方法类似,不过要以delegate
关键字开头。以下是一个简单的委托声明示例:
// 声明一个委托,它可以封装返回值为int,参数为两个int类型的方法
delegate int MathOperation(int a, int b);
2. 创建委托实例
声明好委托后,你就可以创建委托的实例,并且把一个符合委托签名的方法赋值给它。示例如下:
class Program
{
// 定义一个符合委托签名的方法
static int Add(int a, int b)
{
return a + b;
}
static void Main()
{
// 创建委托实例,并将Add方法赋值给它
MathOperation operation = Add;
// 调用委托实例
int result = operation(3, 5);
Console.WriteLine("3 + 5 = " + result);
}
}
3. 多播委托
委托还支持多播,也就是一个委托实例可以封装多个方法。通过+=
和-=
运算符,你能够添加或移除方法。示例如下:
class Program
{
static void Method1()
{
Console.WriteLine("Method1 is called.");
}
static void Method2()
{
Console.WriteLine("Method2 is called.");
}
static void Main()
{
// 声明一个无参数、无返回值的委托
Action multiCastDelegate = Method1;
// 添加一个方法到委托实例
multiCastDelegate += Method2;
// 调用委托实例,会依次调用封装的所有方法
multiCastDelegate();
// 移除一个方法
multiCastDelegate -= Method1;
// 再次调用委托实例
multiCastDelegate();
}
}
4. 内置委托类型
C# 提供了一些内置的委托类型,像Action
和Func
,这样你就不用每次都声明新的委托类型了。
Action
:用于封装无返回值的方法,可接受最多 16 个参数;
// 声明一个接受两个int类型参数,无返回值的Action委托实例
Action<int, int> printSum = (a, b) => Console.WriteLine(a + b);
printSum(2, 4);
Func
:用于封装有返回值的方法,最后一个类型参数表示返回值类型,前面的类型参数表示方法的参数类型,可接受最多 16 个参数。
// 声明一个接受两个int类型参数,返回值为int类型的Func委托实例
Func<int, int, int> multiply = (a, b) => a * b;
int product = multiply(3, 6);
Console.WriteLine("3 * 6 = " + product);