C#中的委托
C#中的委托类似于C++中的一种特殊的指针:指向函数的指针。通过定义指向函数的指针,在程序中我们就可以灵活的调用多个函数,当然,前提是这些函数的返回类型和参数列表的个数和类型都相同。通过指向函数的指针,我们还可以将函数作为另一个函数的参数。
首先复习一下C++中的指向函数的指针。
1:定义。格式如下:
返回类型 (*指针变量名)(参数类型列表) 注意:参数类型列表中只有参数类型和个数,没有形参名。
如:
double(*fp)(double,double)
2:函数指针的赋值。
格式:指针变量名 = 函数名
注意:函数名所代表的函数,其返回类型和参数列表必须和函数指针的定义中的参数相同。
假如有以下的两个函数:
doublemultiple(doublep1,doublep2){returnp1*p2;}doubledivide(doublep1,doublep2){returnp1/p2;}
在程序中就可以将这两个函数赋给指针fp并且使用了。
如:
fp=multiply;fp(1.0,2.0);//等同于调用函数multiply(1.0,2.0);fp=divide;fp(4,2);//等同于调用函数divide(4,2);
3:利用函数指针将函数作为另一函数的参数。
因为指向函数的指针就是一个指针变量,所有可以将其作为函数的参数。
如:
voiddoSomething(double(*fp)(double,double),doublep1,doublep2){cout<<fp(p1,p2)<<endl;}
C#中的委托也是如此。
首先要定义委托类型的变量;
然后要对变量进行赋值;
最后是调用。
1:委托类型的定义:使用关键字delegate。
格式:delegate 返回类型 委托类型名(形参列表)
注意:与C++中的函数指针不同,在定义委托类型的形参列表中,除了要给出类型,还有给出形参名。类似于在定义函数原型时,加了个delegate关键字。
如:
delegatedoubleMyDelegate(doublep1,doublep2);
注意:此处的MyDelegate并不是一个变量,而是类似于类的一个类型,在使用该委托时还有定义该类型的变量。
2:定义委托类型的变量。
格式:委托类型名 变量名;
3:委托变量的赋值和调用
假如程序中有以下两个函数:
doubleMultiply(doublep1,doublep2){returnp1*p2;}doubleDivide(doublep1,doublep2){returnp1/p2;}
有两种方法可以给委托变量赋值
MyDelegatemyDelegate;//定义委托类型的变量myDelegate=newMyDelegate(Multiply);//赋值方法1Console.WriteLine(myDelegate(2.0,3.0));//委托变量的使用myDelegate=Divide;//赋值方法2Console.WriteLine(myDelegate(4,2));
4:将委托用于函数参数。和C++的函数指针略有不同。
例:
voidTest(MyDelegatemyDelegate){myDelegate(3,4);}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。