当前位置:编程学习 > asp >>

.NET 中的委托

1.1.1 定义

  委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的使用可以像其他任何方法一样,具有参数和返回值,如下面的示例所示:

  //Code in C#

  public delegate int PerformCalculation(int x, int y);

  与委托的签名(由返回类型和参数组成)匹配的任何方法都可以分配给该委托。

  简单理解Delegate委托(或代理)是一种数据类型:它的变量可以引用到某一个符合要求的方法上,通过委托可以间接地调用该方法。

  其实.NET的委托类似于C语言的函数指针,区别在于.NET委托是类型安全的,这说明,C中的函数指针只不过是一个指向存储单元的指针,我们无法说出这个指针实际指向什么。

1.1.2 委托使用

  • 使用委托的四部曲:
  • 定义一种委托类型
  • 委托执行时要调用方法
  • 定义一个委托实例
  • 委托实例的调用

  我们先定义一种委托类型如下:

//自定义一种委托类型

public delegate void StringProcessor(string input);

然后我们再定义5中候选的委托方法如下:

void PrintString(string x)

void PrintInteger(int x)

void PrintTwoStrings(string x, string y)

int GetStringLength(string x)

void PrintObject(object x)

  大家猜猜看哪个和上面提供的委托类型签名匹配(签名匹配:参数类型,参数个数和返回类型匹配)。激动时刻到了马上公布答案,和委托类型匹配的方法是PrintString和PrintObject,如果有不明白的请细细考虑一下委托匹配的条件—签名匹配。

                                     

图1委托成功输出

 

  现在对委托有了一定的认识,接下来我们将介绍委托最经常使用的地方—事件。

  我们将从发送器和接受器的角度讨论事件,例如在UI编程中,鼠标单击或键盘按键,发送器就是.NET的CLR,注意事件发送器并不知道接收器是谁,这符合面向对象的原则,而且某个事件接收器有个方法处理该事件,这个时候就要委托,如前面所讲事件发送器对事件接收器一无所知,通过委托作为一个中介,接收器把事件处理方法注册到事件中,这样就实现了由发送器->委托->接收器的过程了。

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

  

1.1.3 自定义委托

  前面话有点难以理解,接下来我们通过具体的例子分析一下何谓委托,该如何实现委托。现在不是很喜欢搞多国语言化的吗?看看如何让我们的程序会说多种语言吧!

/// <summary>
/// the Englishes speaker.
/// </summary>
/// <param name="name">The name.</param>
public void EnglishSpeaker(string name)
{
Console.WriteLine(
string.Format("Hello my name is {0} and I am English speaker. ", name));
}

/// <summary>
/// the Chineses speaker.
/// </summary>
public void ChineseSpeaker()
{
Console.WriteLine(
string.Format("您好我的名字叫{0},我是讲普通话的。 ", name));
}

  好啦现在我们有两个方法分别是说普通话和英语,现在我们的程序会说普通话和英语啦。现在我们考虑究竟什么时候讲普通话什么时候讲英语,那不简单我们加个判断就OK啦,是的我们可以通过switch或者if else就可以实现啦。

/// <summary>
/// 根据上下文调用不同的方法
/// </summary>
/// <param name="name">string</param>
补充:Web开发 , ASP.Net ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,