关于C#中的方法签名,Stack Overflow有几个问题。几乎所有解决方案都表明返回值和访问级别不是方法签名的一部分。但我在MSDN completely opposite information.
上找到了通过指定访问级别(如public或private),可选修饰符(如abstract或sealed),返回值,方法名称和任何方法参数,在类或结构中声明方法。这些部分是该方法的标志。
和
为了方法重载的目的,方法的返回类型不是方法签名的一部分。但是,在确定委托与其指向的方法之间的兼容性时,它是方法签名的一部分。
我很困惑。真相是什么?
答案 0 :(得分:5)
C#规范将签名定义为不包含返回类型。 CLI规范将其定义为包含返回类型。
虽然这种小差异是不幸的,但从背景中推断出意义的意图并不难。正如您引用的文本所示,当将方法与委托匹配时,返回类型是相关的;在进行虚拟覆盖时,以及在许多其他情况下,它也是相关的。在重载解析期间,返回类型是不相关的,这是C#规范最关心"签名"一种方法。
答案 1 :(得分:4)
根据C#语言规范的第3.6节,方法签名不包括返回类型(显式)或访问修饰符(省略):
方法的签名包括方法的名称,类型参数的数量以及每个形式参数的类型和种类(值,参考或输出),按从左到右的顺序考虑。出于这些目的,在形式参数类型中出现的方法的任何类型参数不是通过其名称来标识,而是通过其在方法的类型参数列表中的序号位置来标识。 方法的签名特别不包括返回类型,可以为最右边的参数指定的params修饰符,也不包括可选的类型参数约束。
答案 2 :(得分:4)
他们只是没有使用术语'签名'从严格意义上说。第一次使用是严格的,第二次使用不是。 他们想要强调的是,对于代表来说,签名和返回类型都很重要。
请注意,MSDN是指南,而不是规范。有时他们会做一些简化或更松散的术语。