方法重载

定义: 当使用不同的参数声明多个具有相同名称的方法时,它被称为方法重载。方法重载通常表示在其目的上相同但被编写为接受不同数据类型作为其参数的函数。

影响因素

  • 参数数量
  • 参数类型
  • 返回类型**

考虑一个名为 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) { ... }