gpt4 book ai didi

c# - 为什么我不能将方法作为对象传递?

转载 作者:行者123 更新时间:2023-11-30 20:49:47 25 4
gpt4 key购买 nike

假设我有:

public void Print() { ... }
public void F(object o) { ... }

现在我可以这样做了:

Action a = t.Print;
F(a);

但不是:

F(Print);

为什么?为什么我可以将 Action 作为 object 而不是方法?不是所有的委托(delegate)都解析为方法吗?不应该是一样的吗?

谢谢。

最佳答案

当转换为对象时,没有到委托(delegate)的隐式转换,因为它不知道要创建什么类型的委托(delegate)。例如,Print 匹配 ActionThreadStart - 以及大约 40 种匹配 void SomeDelegateName() 的其他委托(delegate)类型> 签名(即没有参数,没有返回值)。同样,如果没有委托(delegate)类型,则无法将方法组(Print 是方法组,而不是方法)解析为单个重载。

这个有效:

F((Action)Print);

关键点:Action 绝对没有什么特别之处——它只是一个委托(delegate)类型——并且它与许多其他委托(delegate)类型具有相同的签名。

关于c# - 为什么我不能将方法作为对象传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23113266/

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