C#使用參數數組


  重載,是指在相同的作用域內,聲明多個同名的方法。用以對不同類型或數量的參數的參數執行相同的操作。比如,可以求兩個或者三個 int類型數中的最大值,我們可以編寫這樣的方法實現:

  

class Util
{
    public static int Max(int num1,int num2)
    {
        return (num1>num2||num1=num2)?num1:num2;
    }
    
    public static int Max(int num1,int num2,int num3)
    {
        int max=num1;
        if(max<num2) max=num2;
        if(max<num3) max=num3;
        return max;
    }
}

  顯然,當參數數目不確定的時候,重載不是一個好的解決辦法,這時候,可以使用數組作為參數傳入。以上面的問題為例:

class Util
{
    public static int Max(int[] paramList)
    {
        if(paramList==null||paramList.length==0)
        {
            throw new ArgumentException("Util.Max:參數值數量不足");
        }
        int currentMax=paramList[0];
        foreach(int i in paramList)
        {
            if(currentMax<i)
            {
                currentMax=i;
            }
        }
        return currentMax;
    }
}

  為了使用Max方法判斷2個int值得最小值,可以像下面這么寫:

int[] array=new int[2];
array[0]=first;
array[1]=second;
int max=Util.Max(array);

  為了使用Max方法判斷2個int值得最小值,可以像下面這么寫:

int[] array=new int[3];
array[0]=first;
array[1]=second;
array[2]=third;
int max=Util.Max(array);

  雖然上面的辦法避免了大量的重載,但是額外多了很多代碼來填充數組,但是如果用 params 關鍵字來聲明一個params數組,一切就OK了,還是用上面的例子,用法如下:

class Util
{
    public static int Max(params int[] paramList)
    {
        if(paramList==null||paramList.length==0)
        {
            throw new ArgumentException("Util.Max:參數值數量不足");
        }
        int currentMax=paramList[0];
        foreach(int i in paramList)
        {
            if(currentMax<i)
            {
                currentMax=i;
            }
        }
        return currentMax;
    }
}

  這時候如果要求四個int類型的數中的最大值,方法為: Util.Max(first,second,third,fourth);

  編譯器會自動完成填充數組的過程,再將數組的作為參數傳遞進去。

  那么,對於類型不同的參數,同樣可以使用   params object[]

  關於params數組,要注意一下幾點:

  1、只能為一位數組使用 params 關鍵字,不能為多為數組使用,否則編譯不能通過。

  2、不能只依賴 params 關鍵字來重載一個方法。 params 關鍵字不構成方法簽名的一部分,例如:

    

//編譯時錯誤:重復的聲明
public static int Max(int[] paramList)
...
public static int Max(params int[] paramList)
...

  3、不允許為 params 數組指定 ref 或 out修飾符。

  4、params 數組必須是方法的最后一個參數,沒個方法中也只能有一個 params 數組參數。

//編譯時錯誤
public static int Max(params int[] paramList,int i)
...

  5、非params方法優先

public static int Max(int first,int second)
...
public static int Max(params int[] paramList)
...

  對於上面的重載方法,傳入兩個 int 參數時,調用上面的方法,傳入其它任意數量的 int 參數時,調用下面的方法。這樣做並非多余,實則起到優化作用。

  6、有歧義的重載編譯不能通過。

//編譯時錯誤
public static int Max(params int[] paramList)
...
public static int Max(int i, params int[] paramList)
...

  如上,程序無法分辨調用哪一個方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM