什么是委托
委托(Delegates
)是C#中一种特别的类型,它可以引用具有指定参数类型和返回类型的方法。
比如public delegate int MyDelegate (string s)
它可以用来引用一个方法(该方法具有string
类型参数和int
返回值)
怎么用
贴一下官方的示例
using System;
delegate double Function(double x);
class Multiplier
{
double factor;
public Multiplier(double factor)
{
this.factor = factor;
}
public double Multiply(double x)
{
return x * factor;
}
}
class DelegateExample
{
static double Square(double x)
{
return x * x;
}
static double[] Apply(double[] a, Function f)
{
double[] result = new double[a.Length];
for (int i = 0; i < a.Length; i++) result[i] = f(a[i]);
return result;
}
static void Main()
{
double[] a = {0.0, 0.5, 1.0};
double[] squares = Apply(a, Square);
double[] sines = Apply(a, Math.Sin);
Multiplier m = new Multiplier(2.0);
double[] doubles = Apply(a, m.Multiply);
}
}
Apply
方法将参数double[] a
应用给Function f
,这里的f
就是一个委托。你可以传入一个方法(它需要具有double
类型参数和double
类型返回值),比如示例代码中的Square
、Math.Sin
和m.Multiply
。
有什么用
C#是一门强类型的语言。函数的参数必须要有严格的类型。而且也是不允许直接把函数作为另一个函数的参数的。我们可以用委托传递回调函数。
心得体会
感觉就如同函数指针,但是对函数的参数和返回值类型有了约束,更加安全。