你有一个简单但有用的例子来理解代表的目的吗?

时间:2012-08-10 16:21:57

标签: c# events delegates

  

可能重复:
  when & why to use delegates?

我理解大多数C#语法,我部分理解委托,但我找不到任何需要使用它们的情况。

您可以通过一些示例帮助我了解他们在软件开发中的位置吗?我会很开心的。谢谢。

2 个答案:

答案 0 :(得分:1)

代表是表达代码提供者和代码使用者之间相互义务的另一种方式。

就像“我需要一个可以添加两个整数并返回两个整数的人”和“嘿,我是一个方法,我可以添加两个整数并且我返回一个int,你可以使用我”。

从遥远的角度来看,问“我为什么需要代表”就像问“为什么我需要接口”。而不是表达“类合同”,而是表达“方法合同”。

有趣的是,大多数使用代理处理的案例都可以通过接口处理,反之亦然。只是C#为您提供了两种机制之间选择的更大灵活性。例如,在Java中没有这种灵活性,其中义务是使用接口表示的。

答案 1 :(得分:1)

委托的一个功能是充当函数指针。在我必须制作的程序的情况下,我需要运行类似的函数并以数组样式调用它们。

例如,如果你有一些功能。

double play(int data1, int data2)
double work(int x, int y)

这两个人签名相同。他们都返回双打,两者都有2个整数。 他们可以通过代表打电话

delegate double myFunctions(int a, int b);

所以我想说我需要从同一个函数运行“play”和“work”。我可以这样做:

public void do_something( myFunctions action, String information)
{
   int input1;
   int input2;
   /*
     Lets say the string was.... the dimensions of a rectangle expressed as 5x8
     here we parse the string so...

     information is "5x8:
     set input1 to 5
     set input2 to 8
   */

   //then run the function that was passed in.
   action(input1, input2);
}

您可以将此功能称为:

do_something(play, "5x8");
//or
do_something(work, "484x237");

那里的评论区域是我认为会使这不是一个微不足道的例子。基本上,至少在这种情况下,它可以帮助模块化程序。