C#中的参数修饰符
- 无修饰符
如果一个参数没有修饰符标记,则认为它是按值传递,这将意味着被调用的方法收到原始数据的一份副本,在被调用方法中进行运算的是这个副本而不是原来的值,因此不改变调用者中原来的值。 - out
输出方法由被调用者的方法赋值,按引用传递,如果被调用者的方法没有给输出参数赋值,则会出现编译错误。
out最大的用处就是调用者仅使用一次方法的调用,就可以获取多个返回值。(在C#7.0中调用者仅使用一次方法的调用就可以获取多个返回值,建议使用元组) - ref
ref是调用者赋初值,但是可以由被调用者可选地赋值(数据仍然是按引用传递),如果被调用地方法未能给ref标记的参数赋值,编译也不会报错。 - params
这个参数修饰符允许将一组可变数量地参数作为单独的逻辑参数进行传递,方法只能有一个params修饰符,而且必须是方法的最后一个参数。
out和ref地区别:
- out修饰的参数必须在方法内进行修改,ref修饰的参数在方法内可以修改也可以不修改
- 在传入参数时,如果参数是局部变量的话,out修饰的参数可以赋初值亦可以不赋值,因为out一定会给它赋值,但是ref修饰的参数,必须有初始值才可以调用,也就是在调用前参数必须赋初值,因为ref修饰的参数在被调用方法内不一定被赋值