方法過載
定義: 當使用不同的引數宣告多個具有相同名稱的方法時,它被稱為方法過載。方法過載通常表示在其目的上相同但被編寫為接受不同資料型別作為其引數的函式。
影響因素
- 引數數量
- 引數型別
- 返回型別**
考慮一個名為 Area
的方法,它將執行計算函式,它將接受各種引數並返回結果。
例
public string Area(int value1)
{
return String.Format("Area of Square is {0}", value1 * value1);
}
這個方法將接受一個引數並返回一個字串,如果我們用一個整數呼叫該方法(比如 5
),輸出將是 Area of Square is 25
。
public double Area(double value1, double value2)
{
return value1 * value2;
}
類似地,如果我們將兩個 double 值傳遞給此方法,則輸出將是兩個值的乘積,並且型別為 double。這可以用於乘法以及找到矩形的面積
public double Area(double value1)
{
return 3.14 * Math.Pow(value1,2);
}
這可以專門用於查詢圓的區域,它將接受雙值(radius
)並返回另一個雙值作為其區域。
這些方法中的每一個都可以正常呼叫而不會發生衝突 - 編譯器將檢查每個方法呼叫的引數,以確定需要使用哪個版本的 Area
。
string squareArea = Area(2);
double rectangleArea = Area(32.0, 17.5);
double circleArea = Area(5.0); // all of these are valid and will compile.
**請注意,僅返回型別無法區分兩種方法。例如,如果我們有兩個具有相同引數的 Area 定義,如下所示:
public string Area(double width, double height) { ... }
public double Area(double width, double height) { ... }
// This will NOT compile.
如果我們需要讓我們的類使用返回不同值的相同方法名稱,我們可以通過實現介面並明確定義其用法來消除歧義問題。
public interface IAreaCalculatorString {
public string Area(double width, double height);
}
public class AreaCalculator : IAreaCalculatorString {
public string IAreaCalculatorString.Area(double width, double height) { ... }
// Note that the method call now explicitly says it will be used when called through
// the IAreaCalculatorString interface, allowing us to resolve the ambiguity.
public double Area(double width, double height) { ... }