位置:首页 > 软件操作教程 > 编程开发 > C# > 问题详情

C# 函数的重载

提问人:刘团圆发布时间:2020-12-04

    在调用函数时,必须匹配函数的签名。这表明,需要有不同的函数来操作不同类型的变量。函数重载允许创建多个同名函数,每个函数可使用不同的参数类型。例如,前面使用了下述代码,其中包含函数 MaxValueO:

class Program

{

    static int MaxValue(int[] intArray)

    {

        int maxVal = intArray[0];

        for (int i = 1; i < intArray.Length; i++)

        {

            if (intArray[i] > maxVal)

                maxVal = intArray[i];

        }

        return maxVal;

    }

    static void Main(string[] args)

    {

        int[] myArray = { 1, 8, 3, 6, 2, 5, 9, 0, 2 );

        int maxVal = MaxValue(myArray);

        WriteLine("The maximum value in myArray is {maxVal}");

        ReadKey();

    }

}

    这个函数只能用于处理int数组。可为不同的参数类型提供不同名称的函数,例如把上述函数重命名为IntArrayMaxValue(),并添加诸如DoubleArrayMaxValue()的函数来处理其他类型。还有一种方法,即在代码中添加如下函数:

static double MaxValue(double[] doubleArray)

{

  double maxVal = doubleArray[0];

  for (int i = 1; i < doubleArray.Length; i++)

  {

    if (doubleArray[i] > maxVal)

      maxVal = doubleArray[i];

  }

  return maxVal;

}

    这里的区别是使用了double值。函数名称MaxValueO是相同的,但其签名是不同的。这是因为如前所述,函数的签名包含函数的名称及其参数。用相同签名来定义两个函数是错误的,但因为这里的两个函数的签名不同,所以没有问题。


    添加了前面的代码后,现在有两个版本的MaxValue(),它们的参数是int和double数组,分别返回int或double类型的最大值。

    这种代码的优点是不必显式地指定要使用哪个函数。只需要提供一个数组参数,就可以根据使用的参数类型执行相应的函数。

    此时,应注意Visual Studio中IntelliSense的另一项功能。如果在应用程序中有上述两个函数,而且要在MainG或其他函数中键入函数的名称,IDE就可以显示出可用的重载函数。如果键入下面的代码:

    double result = MaxValue(

IDE会提供两个MaxValueO版本的信息,可使用上下箭头键在其间滚动,如图所示。


在重载函数时,应包括函数签名的所有方面。例如,有两个不同的涵数,它们分别带有值参数和引用参数:

static void ShowDouble(ref int val)

{

  …

{

static void ShowDouble(int val)

{

  …

}

选用哪个版本完全根据函数调用是否包含ref关键字来确定。下面的代码将调用引用版本:

    ShowDouble(ref val);

下面的代码将调用值版本:

    ShowDouble(val);

此外,还可以根据参数的个数等来区分函数。

继续查找其他问题的答案?

相关视频回答
回复(0)
返回顶部