资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

C#中的委托-创新互联

C#中的委托类似于C++中的一种特殊的指针:指向函数的指针。通过定义指向函数的指针,在程序中我们就可以灵活的调用多个函数,当然,前提是这些函数的返回类型和参数列表的个数和类型都相同。通过指向函数的指针,我们还可以将函数作为另一个函数的参数。

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名注册雅安服务器托管、营销软件、网站建设、高密网站维护、网站推广。

首先复习一下C++中的指向函数的指针。

1:定义。格式如下:

返回类型 (*指针变量名)(参数类型列表)注意:参数类型列表中只有参数类型和个数,没有形参名。

如:

double (*fp)(double, double)

2:函数指针的赋值。

格式:指针变量名 = 函数名

注意:函数名所代表的函数,其返回类型和参数列表必须和函数指针的定义中的参数相同。

假如有以下的两个函数:

double multiple(double p1, double p2)
{
    return p1 * p2;
}
double divide(double p1, double p2)
{
    return p1 / p2;
}

在程序中就可以将这两个函数赋给指针fp并且使用了。

如:

fp = multiply;
fp(1.0, 2.0);    //等同于调用函数multiply(1.0, 2.0);
fp = divide;
fp(4, 2);    //等同于调用函数divide(4, 2);

3:利用函数指针将函数作为另一函数的参数。

因为指向函数的指针就是一个指针变量,所有可以将其作为函数的参数。

如:

void doSomething(double (*fp)(double, double), double p1, double p2)
{
    cout << fp(p1, p2) << endl;
}

C#中的委托也是如此。

首先要定义委托类型的变量;

然后要对变量进行赋值;

最后是调用。

1:委托类型的定义:使用关键字delegate。

格式:delegate 返回类型 委托类型名(形参列表)   

注意:与C++中的函数指针不同,在定义委托类型的形参列表中,除了要给出类型,还有给出形参名。类似于在定义函数原型时,加了个delegate关键字。

如:

delegate double MyDelegate(double p1, double p2);

注意:此处的MyDelegate并不是一个变量,而是类似于类的一个类型,在使用该委托时还有定义该类型的变量。

2:定义委托类型的变量。

格式:委托类型名 变量名;

3:委托变量的赋值和调用

假如程序中有以下两个函数:

double Multiply(double p1, double p2)
{
    return p1 * p2;
}
double Divide(double p1, double p2)
{
    return p1 / p2;
}

有两种方法可以给委托变量赋值

MyDelegate myDelegate;    //定义委托类型的变量
myDelegate = new MyDelegate(Multiply);    //赋值方法1
Console.WriteLine(myDelegate(2.0, 3.0));    //委托变量的使用
myDelegate = Divide;        //赋值方法2
Console.WriteLine(myDelegate(4, 2));

4:将委托用于函数参数。和C++的函数指针略有不同。

例:

void Test(MyDelegate myDelegate)
{
    myDelegate(3, 4);
}

创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。


分享名称:C#中的委托-创新互联
链接URL:http://cdkjz.cn/article/ddiijc.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220