2012-08-10 34 views
2

可能重复:
when & why to use delegates?你有没有一个简单而有用的例子来了解代表的目的?

我明白最C#语法,我理解部分的代表,但我无法找到我需要使用它们的任何情况。

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

+0

在MSDN以及Google上有很多示例..先试试吧 – MethodMan 2012-08-10 16:25:37

+0

好的,谢谢你们俩。我是新手。 – Josell 2012-08-10 16:26:41

回答

1

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

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

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

有趣的是,大多数用代表处理的情况都可以用接口处理,反之亦然。只是C#让你更灵活地选择两种机制。例如,您在Java中没有这种灵活性,其中义务使用接口表示。

+0

我喜欢接口。那么,代表就像个别方法的接口?当然,他们的行为更像是一个可以调用的方法队列,但这就是主意,对吧? – Josell 2012-08-10 16:40:50

+0

是的,就是这个想法。是的,有多个代表(代表合并),但基本结构只是“在方法层面表达的义务”。 – 2012-08-10 16:50:25

1

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

例如,如果你有几个功能。

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

这两个具有相同的签名。他们都返回双打,并且都采取2整数。 他们可以通过调用一个委托

delegate double myFunctions(int a, int b); 

因此,可以说,我需要从同一个功能“玩”和“工作”。我能做到这一点是这样的:

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"); 

和注释区域有什么,我认为将使这不是一个简单的例子。基本上,至少在这种情况下,它可以帮助模块化程序。

相关问题