• (原创)c#学习笔记06--函数05--函数的重载


    6.5  函数的重载

      函数重载允许创建多个同名函数。这些函数可使用不同的参数类型。(函数重载不能用函数返回值作为区分。如果只是返回值不同就能重载函数,那么调用函数时就无法知道调用哪个返回值函数(别忘了类型隐式转换),所以就没办法执行代码,所以不能用返回值来区分函数重载。)

      例如,前面使用了下述代码,其中包含函数MaxValue():

          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, 3, 0, 2 }; 
                  int maxVal = MaxValue(myArray); 
                  Console.WriteLine("The maximum value in myArray is {0}", maxVal); 
                  Console.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值。函数名称MaxValue()是相同的,但其签名是不同的。这是因为如前所述,函数的签名包含函数的名称及其参数。用相同的签名定义两个函数是错误的,但因为这两个函数的签名不同,所以是可行的。

      note: 函数的返回值类型不是签名的一部分,所以不能定义两个仅返回类型不同的函数,它们实际上有相同的签名。

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

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

          static void ShowDouble(ref int val) 
          { 
              ... 
          } 
          static void ShowDouble(int val) 
          { 
              ... 
          }

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

        ShowDouble(ref val);

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

        ShowDouble(val);

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

      

  • 相关阅读:
    Spyder 快捷键大全
    上传代码到github,出现 git@github.com: Permission denied (publickey) 错误
    Linux ubuntu 安装 openssh-server 报错
    win10删除「此电脑」中的文档、视频、音乐、下载、图片、桌面等6个文件夹的方法
    IDEA 光标闪烁问题
    委托、Action泛型委托、Func泛型委托、Predicate泛型委托的用法
    C#6.0的新语法特性
    创建多个网站
    发送短信功能(C#)
    VS开发Windows服务
  • 原文地址:https://www.cnblogs.com/wodehao0808/p/4913604.html
Copyright © 2020-2023  润新知