委托语法: 访问修饰符 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两个方法被成功调用了[ 需要注意的是,我在上面的代码中把委托放到了类的外面,但是实际上也是可以放到类里边的。 区别在于: 如果放到一个类的外面,那么同一个命名空间下的所有类都可以访问这个委托; 如果放到一个类的内部,那么只能在当前类中访问。 实际开发中应该以实际需求来确定放外面还是放里面,如果这个委托只在这个类中使用,那么就可以放到类的里边,反之则放到外面。