簡體   English   中英

C#方法重載取決於簽名還是參數數量?

[英]C# method overloading depend on signature or number of parameters?

請在C#方法重載時指導我:它是否取決於方法簽名,返回類型或參數數量? 要說某個方法正在或可以重載,必須進行哪些更改?

謝謝

它取決於簽名-即參數的數量和類型

您可以使用相同數量的參數,但具有不同的類型來具有不同的重載。 例如,請參見Convert類-方法的許多重載都帶有一個參數,但每個重載都帶有不同的類型。

重載考慮了數量,順序和參數的類型。 不考慮將返回類型用於重載

注意,有一個例外:如果某個方法在某個類中被覆蓋,則c#首先嘗試在被覆蓋的類中查找兼容版本,然后僅在祖先中查找。 例如

Class A
{
  public virtual void SetProperty(string value)
  {
  }     
}

Class B: Class A
{
  public override void SetProperty(object value)
  {
  }
}

如果您執行以下操作

  var b= new B();
  b.SetProperty("hello"); // will resolve to overridden method in class B even though you have a more specific version in its parent (class A)

如果要表示過載解析 ,則取決於:

  • 方法名稱:)
  • 參數數量
  • 參數類型
  • 參數的名稱 (如果使用命名參數)
  • 參數是否可選
  • 類型參數數

創建重載方法而言,參數名稱和“可選性”無關,因此例如,這是無效的:

// Not valid: same signature
void M(int x, string y)
void M(int z, string a = "")

在方法名稱,類型參數數量以及參數計數和類型方面,它們具有相同的簽名。

如果參數數量不同或參數類型不同,則稱方法為重載,但僅方法的返回類型不同(不會編譯)時,則不能重載。

例如,以下3個被認為是重載的,而第4個將被說成是過載的,並且如果存在其他3個也不會被編譯:

public int Add(int a, int b); // Method 1, overloaded
public int Add(int a, int b, int c); // Method 2, overloaded
public int Add(double a, double b); // Method 3,  overloaded

public double Add(double a, double b); // Method 4 (invalid, will conflict with Method 3 above)

根據MSDN上的Signatures and overloading (C#)

方法的簽名由方法的名稱以及其每個形式參數的類型和種類(值,引用或輸出)組成,並按從左到右的順序考慮。 方法的簽名具體不包括返回類型,也不包括可能為最右邊的參數指定的params修飾符。

暫無
暫無

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

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