C#方法的参数有几种类型
- 值参数(就是简单的类型)
- 引用型参数(以ref修饰声明)
- 输出参数(以out修饰声明)
- 数组型参数(以params修饰声明)
- 对象型参数(以一个对象修饰声明)
值类型传递(最终参数值不会改变):
方法简单的值参数,传进去值在方法更改,但当控制传递回调过程时,不会保留更改值。
简单理解:方法传的值参数在方法中即使更改了参数值,最终也是不会改变。
引用类型传递(最终值改变):
out与ref(都是按地址传递的,使用后将改变原来参数的数值)
out:地址/引用传递,调用时该参数不需要先初始化,被调用方负责该参数的初始化(简记“只出不进”)。适用于多个返回值,如果只有一个返回值,直接用函数返回值就行,。
ref:地址/引用传递,调用时该参数必需已经初始化(简记“有进有出”)。适用于 当控制权传递回调方法时,在方法中对参数的任何更改都将反映在该变量中就用ref;
总结:
- 使用ref型参数时,传入的参数必需先被初始化,对于out而言,必需在方法中对其完成初始化。
- 使用ref和out时,在方法的参数和直接方法时,都要加ref或者out关键字,以满足匹配。
- out适用于需要返回多个值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候。