C#中的委托
【定义】:委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。
一种引用类型,它是 C++ 函数指针的托管版本。委托可以引用实例和静态(在 Visual Basic 中为 Shared)方法,而函数指针只能引用静态(在 Visual Basic 中为 Shared)方法。 在C#中,委托是一种可以把引用存储为函数的类型。
委托的声明非常类似于函数,但不带函数体,且要使用delegate关键字。
委托的声明指定了一个函数签名,其中包含一个返回类型和参数列表。
在定义了委托后,就可以声明该委托类型的变量。
接着将这个变量初始化为与该委托有相同签名的函数引用。
之后,就可以使用委托变量调用这个函数,就像 该变量是一个函数一样。
在图片合并工具的开发过程中,少不了要分支处理的地方,有些地方分支起来比较麻烦,于是利用了下C#中的委托来处理。关于委托的好处,大道理我说不出来,看下面四段代码,看看你喜欢哪段。注意:这四段代码实现的结果是一样的
一种引用类型,它是 C++ 函数指针的托管版本。委托可以引用实例和静态(在 Visual Basic 中为 Shared)方法,而函数指针只能引用静态(在 Visual Basic 中为 Shared)方法。 在C#中,委托是一种可以把引用存储为函数的类型。
委托的声明非常类似于函数,但不带函数体,且要使用delegate关键字。
委托的声明指定了一个函数签名,其中包含一个返回类型和参数列表。
在定义了委托后,就可以声明该委托类型的变量。
接着将这个变量初始化为与该委托有相同签名的函数引用。
之后,就可以使用委托变量调用这个函数,就像 该变量是一个函数一样。
在图片合并工具的开发过程中,少不了要分支处理的地方,有些地方分支起来比较麻烦,于是利用了下C#中的委托来处理。关于委托的好处,大道理我说不出来,看下面四段代码,看看你喜欢哪段。注意:这四段代码实现的结果是一样的
public void doSomeThing()
{
int i=0;
int n=10;
int state = 0;
for (i = 0; i < n; i++)
{
switch (state)
{
case 0:
do1();
break;
case 1:
do2();
break;
case 2:
do3();
break;
}
}
}
public void doSomeThing()
{
int i=0;
int n=10;
int state = 0;
switch (state)
{
case 0:
for (i = 0; i < n; i++)
{
do1();
}
break;
case 1:
for (i = 0; i < n; i++)
{
do2();
}
break;
case 2:
for (i = 0; i < n; i++)
{
do3();
}
break;
}
}
delegate void dox();
public void doSomeThing()
{
int i=0;
int n=10;
int state = 0;
dox d;
switch (state)
{
case 0:
d = new dox(do1);
break;
case 1:
d = new dox(do2);
break;
case 2:
d = new dox(do3);
break;
}
for (i = 0; i < n; i++)
{
d();
}
}
delegate void dox();
public void doSomeThing()
{
int i=0;
int n=10;
int state = 0;
dox[] list=new dox[]{
do1,do2,do3
};
dox d = list[state];
for (i = 0; i < n; i++)
{
d();
}
}
学会开心每一天(:

浙公网安备 33010602011771号