3

可能重复:
何时以及为什么使用代表?

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

你能通过一些例子帮助我了解他们在软件开发中的地位吗?我会很高兴的。谢谢你。

4

2 回答 2

1

委托是表达代码提供者和代码消费者之间相互义务的另一种方式。

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

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

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

于 2012-08-10T16:34:32.810 回答
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");

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

于 2012-08-10T16:48:47.720 回答