簡體   English   中英

訪問修飾符是C#中方法簽名的一部分嗎?

[英]Is access modifier part of Method Signature in C#?

MSDN此處https://msdn.microsoft.com/zh-cn/library/ms173114.aspx說,諸如“ private / protected”之類的訪問修飾符是c#中方法簽名的一部分。

但是,下面的鏈接似乎不這么認為,因此C#中的方法簽名

哪一個? 還有靜態方法呢? 關鍵字“靜態”是方法簽名的一部分嗎?

謝謝

C#5.0規范 1.6.6。

方法的簽名由方法的名稱,類型參數的數量以及其參數的數量,修飾符和類型組成。 方法的簽名不包括返回類型。

CLI規范 I.8.6.1.5方法簽名:

  • 通話慣例*
  • 通用參數的數量(如果方法是通用的),
  • 如果調用約定指定這是一個實例方法,並且擁有方法的定義屬於類型T,則此指針的類型為... [此處不相關]
  • 零個或多個參數簽名的列表-方法的每個參數一個,
  • 結果值的類型簽名(如果產生)。

筆記:

*調用約定包括靜態/實例規范。

作為參考,II.15.3調用約定:

調用約定指定方法如何期望其參數從調用方傳遞給被調用方法。 它由兩部分組成: 第一部分處理this指針的存在和類型,第二部分涉及用於傳遞參數的機制。

結論:方法簽名的定義均不包含訪問修飾符。

不要相信靜態是方法簽名的一部分,因為即使調用了靜態方法:

Classname.StaticMethodName(..);

雖然實例方法被調用:

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

它仍然定義與簽名匹配的方法和參數。 有關靜態vs實例方法和簽名的更多信息,請參見此文章: 具有相同名稱的靜態和實例方法?

訪問級別不是簽名的一部分,因為您不能擁有:

public void DoThis();

private void DoThis();

兩種方法具有相同的簽名,因為簽名是基於方法,通用參數和方法參數/類型的。

以下是有效的:

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

要么:

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

簡單來說,方法簽名是由其方法名稱和它所接受的參數確定的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM