定義
成員的簽名包含成員的名稱和參數列表。每個成員簽名在類型中必須是唯一的。只要成員的參數列表不同,成員的名稱可以相同。如果類型的兩個或多個成員是同類成員(方法、屬性、構造函數等),它們具有相同的名稱和不同的參數列表,則稱該同類成員進行了重載。例如,Array 類包含兩個 CopyTo 方法。第一個方法采用一個數組和一個 Int32 值,第二個方法采用一個數組和一個 Int64 值。
在設計重載方法的時候應該注意一下事項
1 避免隨意更改重載中的參數名稱。如果某個重載的一個參數與另一個重載的一個參數表示相同的輸入,則這兩個參數應具有同樣的名稱。
例如,不要執行下面的操作:
public void Write(string message, FileStream stream){}
public void Write(string line, FileStream file, bool closeStream){}
這些重載的正確定義如下所示
public void Write(string message, FileStream stream){}
public void Write(string message, FileStream stream, bool closeStream){}
例如,不要執行下面的操作:
public void Write(string message, FileStream stream){}
public void Write(FileStream stream, string message, bool closeStream){}
這些重載的正確定義如下所示:
public void Write(string message, FileStream stream){}
public void Write(string message, FileStream stream, bool closeStream){}
以上兩種寫法結構清晰,增強代碼的可讀性,更加適合規范。
此准則有兩項約束:
如果重載采用變量參數列表,則該列表必須是最後一個參數。
如果重載采用 out 參數,按照約定,這類參數應作為最後的參數
下面的代碼示例對此進行了演示。
public void Write(string message, FileStream stream)
{
this.Write(message, stream, false);
}
public virtual void Write(string message, FileStream stream, bool closeStream)
{
// Do work here.
}
此寫法減少多余的代碼,利於維護。
public void Write(string message, int count)
...public void Write(string message, out int count)