什么是函数委托?

发布于 2024-09-18 00:39:03 字数 369 浏览 2 评论 0 原文

当我运行这两行代码时,我得到了我所期望的结果:

Func<int, int> sqr = x => x * x;
Console.WriteLine(sqr(3)); 

但我不明白为什么将返回值指定为第二个参数?这一切是如何运作的?定义委托时,它必须是:

return-type delegate delName (parameters);

但是,对于 Func 委托,返回类型也被指定为输入参数。有人可以向我解释一下这一切是如何运作的吗?如果可能的话,使用指定返回类型作为输入参数的相同概念编写一个小示例。我发现很难理解幕后发生的事情。

提前致谢 :)

When I run these 2 lines of code I get what I expect:

Func<int, int> sqr = x => x * x;
Console.WriteLine(sqr(3)); 

But I don't understand why the return is specified as the 2nd argument? How does it all work? When you define a delegate it has to be:

return-type delegate delName (parameters);

However, with Func delegate, the return type is also specified as the input argument. Can anybody explain me how it all works? And if possible, write a small example using the same concept of specifying the return type as the input parameter. I find it very difficult to understand what is happening under the hood.

Thanks in advance :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

三生殊途 2024-09-25 00:39:03

您正在谈论的 System.Func 的完整声明是

public delegate TResult Func<T, TResult>(T arg)

因此,当您这样做时,

Func<int, int> sqr = x => x * x;

您正在使用 lambda 表达式声明一个方法,该表达式接受 int x 并返回 x * x。所以现在 sqr 持有对您的方法的引用。在下面的行中,

Console.WriteLine(sqr(3)); 

您实际执行该方法并显示输出。

The full declaration for System.Func you're talking about is

public delegate TResult Func<T, TResult>(T arg)

So when you do

Func<int, int> sqr = x => x * x;

You're declaring a method using a lambda expression which takes an int x and returns x * x. So right now sqr is holding a reference to your method. And in the following line

Console.WriteLine(sqr(3)); 

You actually execute the method and show the output.

溺深海 2024-09-25 00:39:03

Eric Lippert 对此发表了一篇很好的文章

我鼓励您阅读这篇文章,但文章的主旨是返回值出现在右侧的原因是它是最自然的位置。它是英语、数学和高阶函数的自然选择。由于历史原因,C# 将返回类型放在首位。

Eric Lippert did a nice article on this

I encourage you to read the article but the gist of the article is that the reason the return value appears on the right is that it's the most natural position for it. It is the natural choice for both the English language, mathematics and higher order functions. C# has the return type first for historical reasons.

山田美奈子 2024-09-25 00:39:03

它不是“输入参数”,而是 泛型

It is not "input parameter", it is Generics

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文