gpt4 book ai didi

c# - 什么时候可以说发生了方法组转换?

转载 作者:行者123 更新时间:2023-11-30 13:58:52 25 4
gpt4 key购买 nike

所以我不太确定何时可以安全地说发生了方法组转换。我们在之前的帖子中有这个多播委托(delegate):

public partial class MainPage : PhoneApplicationPage
{
public delegate void MyDelegate(int a, int b);
// Constructor
public MainPage()
{
InitializeComponent();

MyDelegate myDel = new MyDelegate(AddNumbers);
myDel += new MyDelegate(MultiplyNumbers);
myDel(10, 20);
}

public void AddNumbers(int x, int y)
{
int sum = x + y;
MessageBox.Show(sum.ToString());
}

public void MultiplyNumbers(int x, int y)
{
int mul = x * y;
MessageBox.Show(mul.ToString());
}
}

我说方法组转换仅在我们分配了一个重载的方法时发生,并且至少有一个重载与委托(delegate)匹配。在这种情况下,没有方法组转换。

一位程序员同事说,如果您不认为 MyDelegate myDel = AddNumbers; (名字指的是问题)是一个方法组转换,那么它会是什么?

C# 语言规范:存在从方法组 (§7.1) 到兼容委托(delegate)类型的隐式转换 (§6.1)。给定一个委托(delegate)类型 D 和一个被归类为方法组的表达式 E,如果 [...]

那么哪种观点是正确的呢?

最佳答案

I say that a method group conversion only occurs when we have assigned a method thats overloaded

不,不需要为方法组转换重载(通过多个方法)。

任何时候你只有一个方法名,或者一个用目标限定的方法名(例如 MultiplyNumbersfoo.MultiplyNumbers),这就是一个方法组。如果您要将其转换为委托(delegate)实例,那就是方法组转换。

编辑:在 7.1 中引起问题的规范部分是这样的:

A method group, which is a set of overloaded methods resulting from a member lookup (7.4).

“重载方法集”可以是大小为 1 的集合——它仍然是一个方法组。

这是由 7.6.5.1(方法调用)支持的 - 强调我的:

For a method invocation, the primary-expression of the invocation-expression must be a method group. The method group identifies the one method to invoke or the set of overloaded methods from which to choose a specific method to invoke.

这清楚地表明,具有一个元素的方法组是一个有意义的概念。

关于c# - 什么时候可以说发生了方法组转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15024743/

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