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