委托语法: 访问修饰符 delegate 返回值类型 委托名称 (参数列表); public delegate void MyDelegate(int A, int B); 声明的委托要和要绑定的方法的“签名”保持一致,签名指的是方法的返回值类型,以及参数列表的类型。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace delegateStart
{
//声明的委托要和要绑定的方法的“签名”保持一致
//签名由方法的返回值类型,方法参数列表的类型,个数,顺序决定的。
//可以看出void是与JiaFa和JianFa相同的的返回值类型,int则是相同的参数列表类型

public delegate void MyDelegate(int A, int B);

class Program
{
    static void Main(string\[\] args)
    {
        string A= Console.ReadLine();
        string B = Console.ReadLine();

        //JiaFa(int.Parse(A),int.Parse(B));
        //JianFa(int.Parse(A), int.Parse(B));

        myDelegate(int.Parse(A), int.Parse(B), JiaFa);
        myDelegate(int.Parse(A), int.Parse(B), JianFa);
        Console.ReadKey();
    }

    //委托可以把方法当做(方法的)参数来传递
    private static void myDelegate(int A,int B,MyDelegate mydelegate)
    {
        mydelegate(A, B);
    }

    //加法运算
    private static  void JiaFa(int A,int B)
    {
        Console.WriteLine(string.Format("{0}+{1}={2}",A,B,A+B));
    }

    //减法运算
    private static  void JianFa(int A,int B)
    {
        Console.WriteLine(string.Format("{0}-{1}={2}", A, B, A - B));
    }
}

}

运行效果:输入两个数88和66,可以看到JiaFa和JianFa两个方法被成功调用了[

](http://www.wjgbaby.com/wp-content/uploads/2017/08/17081302-300x115.png)
](http://www.wjgbaby.com/wp-content/uploads/2017/08/17081302-300x115.png)
需要注意的是,我在上面的代码中把委托放到了类的外面,但是实际上也是可以放到类里边的。 区别在于: 如果放到一个类的外面,那么同一个命名空间下的所有类都可以访问这个委托; 如果放到一个类的内部,那么只能在当前类中访问。 实际开发中应该以实际需求来确定放外面还是放里面,如果这个委托只在这个类中使用,那么就可以放到类的里边,反之则放到外面。