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

本文关键字:是什么 方法 现在 | 更新日期: 2023-09-27 18:22:05

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

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

出于方法重载的目的,方法的返回类型不是方法签名的一部分。然而,当确定委托和它所指向的方法之间的兼容性时,它是方法签名的一部分。

我很困惑。真相是什么?

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

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

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

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

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

他们只是不使用严格意义上的术语"signature"。第一次使用是严格的,第二次使用不是。他们想强调的是,对于代理人来说,签名和返回类型都很重要。

请注意,MSDN只是一个指南,而不是规范。有时他们会做一些简化或更松散的术语。