访问修饰符是C#中Method Signature的一部分吗?

时间:2015-07-03 10:28:24

标签: c# methods static access-modifiers

这里的MSDN https://msdn.microsoft.com/en-us/library/ms173114.aspx表示像“private / protected”这样的访问修饰符是c#中方法签名的一部分。

但是,下面这个链接似乎并不这么认为Method Signature in C#

是哪一个?那么静态方法呢?关键字“静态”是方法签名的一部分吗?

感谢

3 个答案:

答案 0 :(得分:4)

C# 5.0 specification,1.6.6。方法:

  

方法的签名由方法的名称组成   类型参数的数量以及它的数量,修饰符和类型   参数。方法的签名不包括退货   类型。

CLI specification,I.8.6.1.5方法签名:

  • 召集会议*
  • 通用参数的数量,如果方法是通用的,
  • 如果调用约定指定这是一个实例方法,而拥有方法定义属于类型T则该指针的类型为...... [此处不相关]
  • 零个或多个参数签名的列表 - 方法的每个参数一个,
  • 结果值的类型签名(如果生成一个)。

注意:

*调用约定包括静态/实例规范。

供参考,II.15.3呼叫惯例:

  

调用约定指定方法如何期望其参数   从调用者传递给被调用的方法。它由两部分组成   部分:第一部分处理它的存在和类型   指针,而第二个涉及运输机制   争论。

结论:方法签名的定义都不包括访问修饰符。

答案 1 :(得分:0)

In not believe is static是方法签名的一部分,因为即使调用了静态方法:

Classname.StaticMethodName(..);

调用实例方法时:

var o = new Classname();
o.MethodName(..);

它仍然定义了与签名匹配的方法和参数。有关静态与实例方法和签名的更多信息,请参阅此内容:Static and Instance methods with the same name?

访问级别不是签名的一部分,因为您不能拥有:

public void DoThis();

private void DoThis();

两种方法都具有相同的签名,因为签名基于方法,通用参数和方法参数/类型。

以下内容有效:

public void DoThis();
private void DoThis(int x);

OR:

public void DoThis();
private int DoThis<int>();

答案 2 :(得分:0)

简单地说,否。方法签名由其方法名称和它接受的参数决定。