您好,登錄后才能下訂單哦!
參數數組,通過關鍵字params定義參數數組,params類型參數主要用于在對數組長度未知(可變)的情況下進行函數聲明,調用時可以傳入個數不同的實參,具備很好的靈活性。
首先給出一個具體的例子介紹參數數組(params)的具體用法:
例①:
static void Main(string[] args) { T('s', 'a', 'g', 'e', 'w', 'q'); //錯誤提示:T方法沒有采用6個參數的重載 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'); //錯誤提示:T方法沒有采用6個參數的重載 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] + " "); } }
例①、例②對比就會發現,參數數組前不加params的話就只能傳進去一個數組;加了params之后,可以傳進數組或者傳進多個參數。
下面總結一些使用參數數組的注意事項:
1. 只能在一維數組上使用params關鍵字。
2. 不能重載一個只基于params關鍵字的方法。params關鍵字不構成方法的簽名的一部分。
例③:
class Program { public static void Min(int[] list) { } public static void Min( params int[] list) //編譯時錯誤提示:類型Program已經定義了一個名為Min的具有相同參數類型的成員 { } }
例③驗證了2.
3. 不允許ref或out params數組。
例④:
public static void Min(out params int[] list) //編譯時錯誤提示:該參數上修飾符太多 { } public static void Max(ref params int[] list) //編譯時錯誤提示:該參數上修飾符太多 { }
4. params 數組必須是方法的最后一個參數(也就是只能有一個params數組參數)。
例⑤:
public static void Min( params int[] A,int[] B,int[] C)//錯誤提示:params參數必須是形參表中的最后一個參數 { } public static void Max(int[] A,int[] B,params int[] C) { }
5. 編譯器會檢查并拒絕任何可能有歧義的重載。
6. 非params方法總是優先于一個params方法。也就是說,如果愿意,仍然可以為普通情況創建一個方法 的重載版本。
例⑥:
public static void Min(int A,int B) { } public static void Min(params int[] C) { }
第一個先被調用(聲明不帶params數組參數的方法,或許是一種有用的優化技術,可以避免編譯器創建和填充太多的數組)。
7. Black.Hole(黑洞),params object[] list。
例⑦:
public static void Hole(params object[] C) { }
System.Object(object)是所有類的根,使用params object數組作為形參表中的參數來聲明一個方法,它能接受任意數量的object參數;換言之,不僅參數的數量是任意的,參數的類型也可以是任意的。所以,此方法稱為Black.Hole(黑洞)
①. 可以不向它傳遞任何參數;
②. 可以在調用它時,傳遞null作為參數;
③. 可以向它傳遞一個實際的數組。也就是說,可以人工創建本由編譯器來創建的數組;
④. 可以向它傳遞不同類型的其他任何參數,這些參數將自動封裝到一個object數組。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。