引用 http://www.javashuo.com/article/p-bapfgpcq-cr.htmlhtml
params 是C#開發語言中關鍵字, params主要的用處是在給函數傳參數的時候用,就是當函數的參數不固定的時候。 在方法聲明中的 params 關鍵字以後不容許任何其餘參數,而且在方法聲明中只容許一個 params 關鍵字。c#
一、若形參表中含一個參數數組,則該參數數組必須位於形參列表的最後。數組
二、不容許將params修飾符與ref和out修飾符組合起來使用。函數
三、參數數組必須是一維數組。性能
四、與參數數組對應的實參能夠是同一類型的數組名,也能夠是任意多個與該數組的元素屬於同一類型的變量。學習
五、若實參是數組則按引用傳遞,若實參是變量或表達式則按值傳遞。ui
https://www.cnblogs.com/facingwaller/archive/2010/12/28/advance_in_csharp_about_params.htmlspa
static Int32 Add(params Int32[] values) { // NOTE: it is possible to pass the 'values' // array to other methods if you want to. Int32 sum = 0; if (values != null) { for (Int32 x = 0; x < values.Length; x++) sum += values[x]; } return sum; } public static void Main() { var result1 = Add(1, 2, 3, 4, 5); var result2 = Add(1); var result3 = Add(1); }
public static void Main() { DisplayTypes(1, 3, 4); DisplayTypes(new Object[] { 1, 3, 4 }); Console.Read(); }
//編譯後code
DisplayTypes(new object[] { (int) 1, (int) 3, (int) 4 }); DisplayTypes(new object[] { (int) 1, (int) 3, (int) 4 });
總之就是param就是提示編譯器實現對參數進行數組封裝,將可變數目的控制由編譯器來完成。htm
其實質其實構造一個 array 在編譯時肯定其長度來 承載可變個數的參數.但性能上並不划算:由於須要額外構造一個array。
1在堆上分配內存
2初始化其元素
3最後還得被回收。
一、 通常狀況下不要用這種寫法。
二、 除非簡易型的須要,參數類型相同,只是個數多是1個或多個(兩三個那種,逐個羅列),能夠方便使用。如params guid[] customerIds,
須要給人發消息時,接收人多是1個或多個。
實際上是一種正常傳數組的偷懶寫法。傳數組的寫法編譯時比較幹練,性能稍微好點。適用於1個或不少我的。由於不方便逐個羅列每一個元素。
元素個數爲三五個那種,用params寫起來方便,逐個羅列,如。如ReceiveMessage(「hello」,「張三」,」李四」,」王五」)
1參數和返回值儘可能使用接口和基類
顯而易見,能夠適用被更多種(派生)類型。
二、大牛博主撞破南牆有一系列的c#基礎進階博客,能夠拓展學習下。
https://www.cnblogs.com/facingwaller/archive/2010/12/28/advance_in_csharp_about_params.html