(部分有转载)
参数关键字决定了方法中参数的引用形式:
1. Params:关键字可以指定在参数数目可变处采用参数的方法参数。(Params关键字后的参数可以是满足参数类型的任意数量的参数数列)
约束:
(1)一个方法只允许有一个Params参数。
(2)Params关键字后只能由一个参数(数列)。
例://因为参数数列是Object类型的,所以可以接收一切参数类型
public void exampleParams(string id, int count, Params Object[] reference)
{
StringBuilder info = new StringBuilder();
info.Append("Name: " + id + ", Count: " + count + "/n");
foreach(object obj in reference)
{
info.Append(obj.ToString() + "/n");
}
}
//调用处方法,后三个参数为Params参数,不同类型都可以满足Object类型。
exampleParams("P0003", 102, staff_info, lstStaffCompany, staff_healthy)
2.Ref:关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
约束:
(1)若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。
(2)传递到 ref 参数的参数必须最先初始化。这与 out 不同,out 的参数在传递之前不需要显式初始化。
(3)属性不是变量,因此不能作为 ref 参数传递。(非引用变量时属性的传递是值的传递,不改变被传递的属性值)
(4)尽管 ref 和 out 在运行时的处理方式不同,但它们在编译时的处理方式是相同的。因此,如果一个方法采用 ref 参数,而另一个方法采用 out 参数,则无法重载这两个方法。如果两个方法的参数只有ref 和 out的区别,则这两个方法无法重载。
3.Out:关键字使参数按引用传递。
与Ref基本相同,主要区别有:
(1)Out参数可以不用初始化就被引用。
(2)因为(1)的约束,所以在应用out的犯法中,out参数必须被赋值
对Ref 和 Out的理解:Ref必须是本来就存在的变量,在方法内改变不改变都行。Out可以是本来不存在(未初始化)的变量,但是不许在方法内改变(赋值), 要不然Out参数就废了。。。