天天看点

C# 参数关键字(params,ref,out)

(部分有转载)

参数关键字决定了方法中参数的引用形式:

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参数就废了。。。