C#的委托 delegate

委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。

 也就是说委托定义了某一类具有特定参数类型和返回类型的方法。

委托在c#中最好看作是对象的一种新类型。当要把方法传送给其他方法时,需要使用它们。

一般我们作为参数的都是数据,而委托是应用在当要传递方法时。主要的应用如下:

1、启动线程

2、通用库类

3、事件

如果要传递方法,就必须把方法的细节包装在一种新类型的对象中,即委托。

定义委托的语法如下:

delegate void VoidOperation(uint X);

定义了一个委托VoidOperation,并指定该委托的每个实例都包含一个方法的细节,该方法带有一个Uint参数,并返回void。在定义委托时,必须给出它所代表的方法的全部细节。(委托括号里的X指它所代表的方法的参数)

创建委托的实例(也称为委托):

private delegate string GetAString();//定义委托

int x=40;

GetAString  Amethod=new GetAString(x.ToString);//实例化委托 即使委托表示整型变量X的ToString()方法。

在C#中,委托在语法上总是带有一个参数构造函数,这个参数就是委托引用的方法。

方法的特征要匹配于委托的特征。如参数、返回类型等。

如何把委托传递给另一个方法:

eg.1

定义一个MathOperations类,带2个静态方法,对double类型的参数执行两个操作

class MathOperations
{
    public static double MultiplyByTwo(double value)
    {
	return value*2;
    }
    public static double Square(double value)
    {
	return value*value;
    }
}
调用方法:
delegate double(返回类型) DoubleOp(double x(所表示的方法的参数));//定义委托
DoubleOp [] operations=
{
 new DoubleOp(MathOperations.MultiplyByTwo),//调用上述MathOperations类的静态方法
 new DoubleOp(MathOperations.Square)
}//定义委托数组
for(int i=0;i<operations.Length;i++)
{
 ProcessAndDisplayNumber(operations[i],2.0);
 ProcessAndDisplayNumber(operations[i],3.14);//每个operations[i]代表一个委托,即该委托所表示的方法。
}
static void ProcessAndDisplayNumber(DoubleOp action,double value)
{
 double result=action(value);//action(value)即表示调用operations[i]所表示的方法,对value进行操作
}
可以把方法组合到一个数组中,这样就可以在循环中调用不同的方法了。
 
 
 
 
 
 
 
 
 
 
 
 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值