Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 代表-为什么创建这些代表_.net_Delegates - Fatal编程技术网

.net 代表-为什么创建这些代表

.net 代表-为什么创建这些代表,.net,delegates,.net,Delegates,我想我已经把注意力集中在代表们身上了;现在我知道,通常大多数“事情”都是为了解决一个特定的问题而存在的,但是代理解决的是什么问题呢 IMO它解决了当我们想要调用一个存在的方法时的问题,我们不能从另一个项目中引用该方法(否则,我们可能处于两个项目都相互引用的情况下,这是不允许的)。这对我来说是有意义的,我能看出它的用处 还有其他时间/原因/好处吗?它们的存在是为了让您可以将函数放入变量并对其进行操作。例如,Enumerable.Select接受一个委托,该委托告诉它如何处理每个元素。在没有代表的情

我想我已经把注意力集中在代表们身上了;现在我知道,通常大多数“事情”都是为了解决一个特定的问题而存在的,但是代理解决的是什么问题呢

IMO它解决了当我们想要调用一个存在的方法时的问题,我们不能从另一个项目中引用该方法(否则,我们可能处于两个项目都相互引用的情况下,这是不允许的)。这对我来说是有意义的,我能看出它的用处


还有其他时间/原因/好处吗?

它们的存在是为了让您可以将函数放入变量并对其进行操作。例如,
Enumerable.Select
接受一个委托,该委托告诉它如何处理每个元素。在没有代表的情况下,您将如何实施
Select
?例如,您必须实现一个接口,但这很笨拙。(Java就是这样做的,但没有那么好)

实际上,委托非常像一个方法接口


它们还用于本机代码互操作,因此您可以提供指向本机方法的本机函数指针。

例如,我在winform中使用它们通过按钮关闭表单

button.Click += delegate{this.Close();};

将“我们无法引用的项目中的方法”概括为“仅在运行时选择的方法”。代表使用linq和匿名方法。@Tomtom可能广泛使用了它们,但它们自.NET 1.0以来就存在了。@usr:甚至不是这样;委托从一开始就被广泛用于任何基于事件的东西(例如WinForms GUI)。我没有想到它是可枚举的。选择-是的,我真的能理解!