官术网_书友最值得收藏!

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);
              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值。函數名稱MaxValue()是相同的,但其簽名是不同的。這是因為如前所述,函數的簽名包含函數的名稱及其參數。用相同簽名來定義兩個函數是錯誤的,但因為這里的兩個函數的簽名不同,所以沒有問題。

注意:函數的返回類型不是其簽名的一部分,所以不能定義兩個僅返回類型不同的函數,它們實際上有相同的簽名。

添加了前面的代碼后,現在有兩個版本的MaxValue(),它們的參數是int和double數組,分別返回int或double類型的最大值。

這種代碼的優點是不必顯式地指定要使用哪個函數。只需提供一個數組參數,就可以根據使用的參數類型執行相應的函數。

此時,應注意VS中IntelliSense的另一項功能。如果在應用程序中有上述兩個函數,而且要在Main()或其他函數中鍵入函數的名稱,IDE就可以顯示出可用的重載函數。如果鍵入下面的代碼:

        double result = MaxValue(

IDE就會提供兩個MaxValue()版本的信息,可使用上下箭頭鍵在其間滾動,如圖6-9所示。

圖6-9

在重載函數時,應包括函數簽名的所有方面。例如,有兩個不同函數,它們分別帶有值參數和引用參數:

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

選用哪個版本完全根據函數調用是否包含ref關鍵字來確定。下面的代碼將調用引用版本:

        ShowDouble(ref val);

下面的代碼調用值版本:

        ShowDouble(val);

此外,還可以根據參數的個數等來區分函數。

主站蜘蛛池模板: 南召县| 蓬溪县| 怀集县| 奉节县| 新郑市| 肥城市| 淳安县| 札达县| 芜湖市| 德庆县| 湄潭县| 固阳县| 饶平县| 景谷| 宁海县| 石狮市| 弥勒县| 临城县| 陇川县| 沁水县| 罗源县| 蓝山县| 彭州市| 浦北县| 恩施市| 固始县| 江永县| 明溪县| 乌什县| 寻甸| 庄浪县| 汉寿县| 阳曲县| 青川县| 文昌市| 杭州市| 文安县| 特克斯县| 巫溪县| 汾阳市| 定安县|