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

 

相关文章
相关标签/搜索