c#中可變參數params關鍵字學習

引用 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

 

相關文章
相關標籤/搜索