位置:首頁(yè) > 軟件操作教程 > 編程開(kāi)發(fā) > C# > 問(wèn)題詳情

C# 函數(shù)的重載

提問(wèn)人:劉團(tuán)圓發(fā)布時(shí)間:2020-12-04

    在調(diào)用函數(shù)時(shí),必須匹配函數(shù)的簽名。這表明,需要有不同的函數(shù)來(lái)操作不同類型的變量。函數(shù)重載允許創(chuàng)建多個(gè)同名函數(shù),每個(gè)函數(shù)可使用不同的參數(shù)類型。例如,前面使用了下述代碼,其中包含函數(shù) 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();

    }

}

    這個(gè)函數(shù)只能用于處理int數(shù)組??蔀椴煌膮?shù)類型提供不同名稱的函數(shù),例如把上述函數(shù)重命名為IntArrayMaxValue(),并添加諸如DoubleArrayMaxValue()的函數(shù)來(lái)處理其他類型。還有一種方法,即在代碼中添加如下函數(shù):

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;

}

    這里的區(qū)別是使用了double值。函數(shù)名稱MaxValueO是相同的,但其簽名是不同的。這是因?yàn)槿缜八觯瘮?shù)的簽名包含函數(shù)的名稱及其參數(shù)。用相同簽名來(lái)定義兩個(gè)函數(shù)是錯(cuò)誤的,但因?yàn)檫@里的兩個(gè)函數(shù)的簽名不同,所以沒(méi)有問(wèn)題。


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

    這種代碼的優(yōu)點(diǎn)是不必顯式地指定要使用哪個(gè)函數(shù)。只需要提供一個(gè)數(shù)組參數(shù),就可以根據(jù)使用的參數(shù)類型執(zhí)行相應(yīng)的函數(shù)。

    此時(shí),應(yīng)注意Visual Studio中IntelliSense的另一項(xiàng)功能。如果在應(yīng)用程序中有上述兩個(gè)函數(shù),而且要在MainG或其他函數(shù)中鍵入函數(shù)的名稱,IDE就可以顯示出可用的重載函數(shù)。如果鍵入下面的代碼:

    double result = MaxValue(

IDE會(huì)提供兩個(gè)MaxValueO版本的信息,可使用上下箭頭鍵在其間滾動(dòng),如圖所示。


在重載函數(shù)時(shí),應(yīng)包括函數(shù)簽名的所有方面。例如,有兩個(gè)不同的涵數(shù),它們分別帶有值參數(shù)和引用參數(shù):

static void ShowDouble(ref int val)

{

  …

{

static void ShowDouble(int val)

{

  …

}

選用哪個(gè)版本完全根據(jù)函數(shù)調(diào)用是否包含ref關(guān)鍵字來(lái)確定。下面的代碼將調(diào)用引用版本:

    ShowDouble(ref val);

下面的代碼將調(diào)用值版本:

    ShowDouble(val);

此外,還可以根據(jù)參數(shù)的個(gè)數(shù)等來(lái)區(qū)分函數(shù)。

繼續(xù)查找其他問(wèn)題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部