解释1:C#本质论:
解释2:C# 中的方法组 | D栈 - Delft Stack:
深入理解C#中也提过,大意与上图解释一样。
在C# 中的方法组 | D栈 - Delft Stack中还提到过一个奇怪的例子:
重点在于最后一句话,它竟然推翻了自己的论述?把不同名称的方法概括起来称为一个方法组??
这个问题我们放到最后再解释。
解释3:c# - 什么是 C# 中的方法组? - IT工具网 (coder.work)
原文:A method group is the name for a set of methods (that might be just one)
那么问题出现了,什么是一组方法(a set of methods )?
我在详细的阅读了原网站下的内容后,看到一个很有趣的解释:
-
Yes, and the point is that a method group is a compile-time construct. The compiler chooses one method overload according to the context where the message group is used.
-
(是的,重点是方法组是一个编译时构造。编译器根据使用消息组的上下文选择一个方法重载。)
也就是说,一组方法确实表示的是同名的方法。
解释4:MSDN解释
The method group identifies the one method to invoke or the set of overloaded methods from which to choose a specific method to invoke
如下图,我们可以随便将两种方法名相加,便会报错:
同样MSDN的解释也是:同名方法称为方法组。
那么最后尝试解释解释2中为什么最后又把非同名的方法称为同一方法组。看了上述的描述,我们对方法组都有了大概的了解:同名,可以根据我们输入实参的不同,编译器自己从同名的方法组中进行选择。而对于返回值和形参均满足一种委托的方法们,我们的委托恰恰也可以做到差不多的效果:同返回值和形参,可以根据我们输入方法名的不同,编译器从同返回值和形参的方法中进行选择。
这么一对比,是不是就很相似?(笑,有点强行解释的意思了)
最后的最后,
我们到底把:
方法名()
称为方法组,
还是把:
方法名
称为方法组呢?
我个人是认为把 方法名 称为方法组的,毕竟方法名()在调用时其实编译器就已经做出了选择(选择了无行参的那个方法)。