溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C# 用params定義一維參數(shù)數(shù)組

發(fā)布時(shí)間:2020-07-27 18:21:45 來源:網(wǎng)絡(luò) 閱讀:1421 作者:海灬未眠 欄目:編程語言

參數(shù)數(shù)組,通過關(guān)鍵字params定義參數(shù)數(shù)組,params類型參數(shù)主要用于在對(duì)數(shù)組長度未知(可變)的情況下進(jìn)行函數(shù)聲明,調(diào)用時(shí)可以傳入個(gè)數(shù)不同的實(shí)參,具備很好的靈活性。


首先給出一個(gè)具體的例子介紹參數(shù)數(shù)組(params)的具體用法:

例①:

static void Main(string[] args)
{
    T('s', 'a', 'g', 'e', 'w', 'q');  //錯(cuò)誤提示:T方法沒有采用6個(gè)參數(shù)的重載
    T(new object[] { 'a', 'g' ,1,"小龍女"});
}
            
public static void T(object[] c)
{
    for (int i = 0; i < c.Length; i++)
    {
        Console.Write(c[i] + " ");
    }
}

 例②:

static void Main(string[] args)
{
    T('s', 'a', 'g', 'e', 'w', 'q');  //錯(cuò)誤提示:T方法沒有采用6個(gè)參數(shù)的重載
    T(new object[] { 'a', 'g' ,1,"小龍女"});
}
            
public static void T(params object[] c)
{
    for (int i = 0; i < c.Length; i++)
    {
        Console.Write(c[i] + " ");
    }
}

例①、例②對(duì)比就會(huì)發(fā)現(xiàn),參數(shù)數(shù)組前不加params的話就只能傳進(jìn)去一個(gè)數(shù)組;加了params之后,可以傳進(jìn)數(shù)組或者傳進(jìn)多個(gè)參數(shù)。


 

下面總結(jié)一些使用參數(shù)數(shù)組的注意事項(xiàng):


1. 只能在一維數(shù)組上使用params關(guān)鍵字。


2. 不能重載一個(gè)只基于params關(guān)鍵字的方法。params關(guān)鍵字不構(gòu)成方法的簽名的一部分。


  例③:

class Program
{
    public static void Min(int[] list)
    {
    }
        
    public static void Min( params int[] list) //編譯時(shí)錯(cuò)誤提示:類型Program已經(jīng)定義了一個(gè)名為Min的具有相同參數(shù)類型的成員
    {
    }
}

例③驗(yàn)證了2.  



3. 不允許ref或out params數(shù)組。


 例④:

 public static void Min(out params int[] list) //編譯時(shí)錯(cuò)誤提示:該參數(shù)上修飾符太多        
 {
           
 }
 
 public static void Max(ref params int[] list) //編譯時(shí)錯(cuò)誤提示:該參數(shù)上修飾符太多        
 {
 
 }


4. params 數(shù)組必須是方法的最后一個(gè)參數(shù)(也就是只能有一個(gè)params數(shù)組參數(shù))。


 例⑤:

 public static void Min( params int[] A,int[] B,int[] C)//錯(cuò)誤提示:params參數(shù)必須是形參表中的最后一個(gè)參數(shù)
 {
           
 }
 
 public static void Max(int[] A,int[] B,params int[] C)
 {
 
 }


5. 編譯器會(huì)檢查并拒絕任何可能有歧義的重載。


6. 非params方法總是優(yōu)先于一個(gè)params方法。也就是說,如果愿意,仍然可以為普通情況創(chuàng)建一個(gè)方法  的重載版本。


 例⑥:

public static void Min(int A,int B)
{
           
}
 
public static void Min(params int[] C)
{
 
}

第一個(gè)先被調(diào)用(聲明不帶params數(shù)組參數(shù)的方法,或許是一種有用的優(yōu)化技術(shù),可以避免編譯器創(chuàng)建和填充太多的數(shù)組)。


7. Black.Hole(黑洞),params object[] list。


 例⑦:

public static void Hole(params object[] C)
{
 
}


System.Object(object)是所有類的根,使用params object數(shù)組作為形參表中的參數(shù)來聲明一個(gè)方法,它能接受任意數(shù)量的object參數(shù);換言之,不僅參數(shù)的數(shù)量是任意的,參數(shù)的類型也可以是任意的。所以,此方法稱為Black.Hole(黑洞)


①. 可以不向它傳遞任何參數(shù);


②. 可以在調(diào)用它時(shí),傳遞null作為參數(shù);


③. 可以向它傳遞一個(gè)實(shí)際的數(shù)組。也就是說,可以人工創(chuàng)建本由編譯器來創(chuàng)建的數(shù)組;


④. 可以向它傳遞不同類型的其他任何參數(shù),這些參數(shù)將自動(dòng)封裝到一個(gè)object數(shù)組。

 

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI