gpt4 book ai didi

c# - 什么使方法的名称等同于 Action 委托(delegate)?

转载 作者:太空狗 更新时间:2023-10-29 22:28:01 28 4
gpt4 key购买 nike

我只是在试验,最后得到了以下片段:

public static class Flow {
public static void Sequence(params Action[] steps) {
foreach (var step in steps)
step();
}
}
void Main() {
Flow.Sequence(() => F1(), () => F2());
Flow.Sequence(F1, F2); // <-- what makes this equiv to the line above?

}
void F1() { }
void F2() { }

我没有意识到单独的方法名称与 Action 相同。

为什么会这样?

最佳答案

在 C# 中,委托(delegate)只不过是 method pointers .它们可以指向类中的现有方法,或完全独立的匿名委托(delegate)对象。

上面链接中的这段应该解释你的代码中发生了什么:

Any method that matches the delegate's signature, which consists of the return type and parameters, can be assigned to the delegate. This makes is possible to programmatically change method calls, and also plug new code into existing classes. As long as you know the delegate's signature, you can assign your own delegated method.

也就是说,在解析委托(delegate)类型时,考虑的是他们的签名,而不是他们的名字。

在您的情况下,您的 F1()F2() 方法不采用任何参数且不返回任何内容,具有与无参数 Action delegate 匹配的签名:

public delegate void Action();

因此,它们可以隐式转换为 Action

如果您尝试传递具有不同返回类型或至少一个参数的方法,您将收到编译时错误,因为它不对应于 Action 的签名。

关于c# - 什么使方法的名称等同于 Action 委托(delegate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8102109/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com