C#委托学习笔记

什么是委托

委托(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类型返回值),比如示例代码中的SquareMath.Sinm.Multiply

有什么用

C#是一门强类型的语言。函数的参数必须要有严格的类型。而且也是不允许直接把函数作为另一个函数的参数的。我们可以用委托传递回调函数。

心得体会

感觉就如同函数指针,但是对函数的参数和返回值类型有了约束,更加安全。

你可能感兴趣的:(C#委托学习笔记)