学习C#有一段时间了,对委托一直不是很理解,试着说一下。
委托是对方法的传递调用,即把方法像参数一样传递。
我们知道,方法具有参数。这个参数可以是基本数据类型,如int,double等,也可以是引用类型(即类),包括系统自带的和自定义的。例如,我们有个方法Add,它的参数是两个int类型整数。
int Add(int x,int y)
{
return x+y;
}
我们在调用Add方法时,在给它传递实参时只需要是两个int类型的整数即可,即可以是Add(1,2),也可以是Add(3,5),这是显而易见的。
同样,对于一个方法来说,它具有两个限制:返回类型和参数。当把方法作为参数传递时,这个方法以委托的形式出现。在具体调用这个把方法作为参数的函数时,它的实参方法(委托的实例)即是满足了那两个限制的方法,即与形参具有相同的返回类型和参数。说白了,创建函数用委托做形式参数,调用函数时用委托的实例作为实参。
例如:
public delegate int delCompute();//定义委托
class Compute
{
private int a,b;
public Compute(int a,int b)
{
this.a=a;
this.b=b;
}
private int compute(delCompute com) //将委托com作为参数传递
{
return com(a,b);
}
}
class program
{
static int Add(int a,int b)
{ return a+b;}
static int Subtract(int a,int b)
{return a-b;}
static void main(stirng[] args)
{
//实例化两个委托,即给Add与Sbutract方法赋予别名add和subtract。
delCompute add=new delCompute(Add);
delCompute subtract=new delCompute(Subtract);
Computer aa=new Computer(2,3);//实例化Compute类
//调用方法,以委托的实例作为参数
aa.compute(add);
aa.compute(subtract);
}
}