现在c#中的方法签名是什么?

Vit*_*nko 0 c# methods signature

Stack Overflow关于C#中的方法签名有几个问题.几乎所有解决方案都表明返回值和访问级别不是方法签名的一部分.但我在MSDN上发现完全相反的信息.

通过指定访问级别(如public或private),可选修饰符(如abstract或sealed),返回值,方法名称和任何方法参数,在类或结构中声明方法.这些部分一起是该方法的标志.

出于方法重载的目的,方法的返回类型不是方法签名的一部分.但是,在确定委托与其指向的方法之间的兼容性时,它是方法签名的一部分.

我糊涂了.真相是什么?

Eri*_*ert 6

C#规范将签名定义为不包含返回类型.CLI规范将其定义为包含返回类型.

虽然这种小差异是不幸的,但从背景中推断出意义的意图并不难.正如您引用的文本所示,当将方法与委托匹配时,返回类型是相关的; 在进行虚拟覆盖时,以及在许多其他情况下,它也是相关的.返回类型在重载解析期间不相关,重载解析是C#规范最关心方法"签名"的上下文.


drf*_*drf 5

根据C#语言规范的第3.6节,方法签名不包括返回类型(显式)或访问修饰符(省略):

方法的签名由方法的名称,类型参数的数量以及每个形式参数的类型和种类(值,引用或输出)组成,并按从左到右的顺序考虑。为此,以形式形参类型出现的方法的任何类型形参不是通过名称来标识,而是通过其在方法的类型实参列表中的顺序位置来标识。方法的签名具体不包括返回类型,可能为最右边的参数指定的params修饰符,也不包括可选的类型参数约束。