让我的头绕着C#

让我的头绕着C#,c#,delegates,C#,Delegates,我对C#很精通,但我就是不能理解代表们 我可以看出,如果您有多个场景,并且可以根据该场景为委托附加不同的方法,那么它们将非常有用,但这是我唯一能够理解何时使用它们的时间。为什么不直接使用函数呢 对于像MouseClick这样的事件有意义,请等到MouseClick被激发,然后转到MouseClick(),但我在代码中不理解它。我了解javascript函数中的函数,但在C#中找不到任何编程方法来实现这一点,那么委托是一种方法吗 我今天读了大约3篇关于这方面的博客,希望有人能告诉我什么时候100%

我对C#很精通,但我就是不能理解代表们

我可以看出,如果您有多个场景,并且可以根据该场景为委托附加不同的方法,那么它们将非常有用,但这是我唯一能够理解何时使用它们的时间。为什么不直接使用函数呢

对于像MouseClick这样的事件有意义,请等到MouseClick被激发,然后转到MouseClick(),但我在代码中不理解它。我了解javascript函数中的函数,但在C#中找不到任何编程方法来实现这一点,那么委托是一种方法吗


我今天读了大约3篇关于这方面的博客,希望有人能告诉我什么时候100%需要一个委托,其他什么都不需要。

对于您正在查看的一些示例,我可以理解为什么有人会在直接函数上使用委托会让人感到困惑。在这些简单的情况下,您可以很容易地使用基本方法,但代理在LINQ中确实很出色。委托允许在LINQ中进行复杂查询,同时仍然相对容易编写

为什么不直接使用函数呢

这基本上就是委托。如果需要,可以将其视为单个方法接口。可以从现有方法(使用方法组转换)创建委托实例,也可以使用匿名函数(lambda表达式或匿名方法)

我有几篇关于代表的文章:


希望其中至少有一个能帮助你。。。(顺便说一句,我怀疑最接近的“函数中的函数”等价物是lambda表达式。)

您可以使用函数而不是委托,但委托会使代码更干净、可读(例如,行数更少)


[]的事件并不总是对某些UI更改作出反应。假设您有一个后台线程需要在调用另一个函数之前完成。它在这些类型的场景中非常有用,因为它允许您执行诸如跨线程通知之类的操作。

有时它通过引用熟悉的概念来帮助我简化概念

将一个委托看作一个容器(参见下图):

A功能=安装在此容器内的木块

例如,我们不能直接将函数作为参数传递,但我们可以传递委托!因此,基本上我们把木块(函数)放入容器(委托)中,现在我们可以将其作为参数传递,并在需要时使用它

签名=盖子。这确保我们只能将形状正确的块放入容器中

调用委托=获取容器中的所有块(函数)并“调用”或“调用”这些函数

多播委托是指将多个块放入容器中(因此,当我们调用多播委托时,将调用其中的所有函数)

事件只是一个带有锁的容器(委托)。这样可以防止有人打开盖子,把里面所有的砖块都倒出来

如果你想更详细地阅读,这些摘要摘自我的博客

此外,一旦委托和事件有了意义,就有必要了解委托是如何演变为lambda函数的


我希望这个抽象能够更好地理解委托,它确实对我有所帮助。

我想我在这里理解错了,我的意图是说我们可以创建一个函数并将其传递给委托,但是使用匿名函数或lambda表达式更干净。