我明白最C#语法,我理解部分的代表,但我无法找到我需要使用它们的任何情况。
你能通过一些例子帮助我理解他们在软件开发中的位置吗?我会很高兴。谢谢。
我明白最C#语法,我理解部分的代表,但我无法找到我需要使用它们的任何情况。
你能通过一些例子帮助我理解他们在软件开发中的位置吗?我会很高兴。谢谢。
代表是代码提供者和代码使用者之间表达相互义务的另一种方式。
这就像“我需要能够添加两个整数并返回两个整数的人”和“嘿,我是一种方法,我可以添加两个整数,并且返回一个int,您可以使用我”。
从遥远的角度来看,问“为什么我需要委托人”就像问“为什么我需要接口”。而不是表达“阶级合同”,而是表达“方法合同”。
有趣的是,大多数用代表处理的情况都可以用接口处理,反之亦然。只是C#让你更灵活地选择两种机制。例如,您在Java中没有这种灵活性,其中义务使用接口表示。
我喜欢接口。那么,代表就像个别方法的接口?当然,他们的行为更像是一个可以调用的方法队列,但这就是主意,对吧? – Josell 2012-08-10 16:40:50
是的,就是这个想法。是的,有多个代表(代表合并),但基本结构只是“在方法层面表达的义务”。 – 2012-08-10 16:50:25
委托的一个功能是充当函数指针。在我不得不做的一个程序的情况下,我需要运行类似的函数并以数组样式调用它们。
例如,如果你有几个功能。
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");
和注释区域有什么,我认为将使这不是一个简单的例子。基本上,至少在这种情况下,它可以帮助模块化程序。
在MSDN以及Google上有很多示例..先试试吧 – MethodMan 2012-08-10 16:25:37
好的,谢谢你们俩。我是新手。 – Josell 2012-08-10 16:26:41