ref参数功能:ref关键字使用参数按引用进行传递,当控制权传递回调用方法时,在方法中对参数所做的任何改变都将直接反映在该变量中
ref参数使用时需注意:
1.ref和out关键字类似于C中的指针变量一样。可以直接针对这个变量进行操作,而不是针对这个值得Copy进行操作
2.如果要使用ref参数,则方法定义和调用方法都必须使用ref关键字,传递到ref的参数必须进行初始化,这与out是不同的,out参数在传递前不需要显示初始化
class RefExample
{
static void Method(ref int i) //方法定义时需要使用ref关键字
{
i = 44;
}
static void Main()
{
int val = 0;
Method(ref val); // 引用这个Method方法时,参数val也需要用ref关键字修饰,不可省略。
//如果是out参数 此处可以省略out关键字
}
}
3.尽管ref参数和out参数是不同的,但是它们在编译时的处理方式是一致的,所以如果有重载方法一个使用ref重载,另一个使用out重载,那么这两个方法无法进行重载。因为从编译的角度看,这两个方法的代码相同。
class CS0663_Example { public void SampleMethod(ref int i) //定义的重载方法一,使用ref参数 { } public void SampleMethod(out int i) //定义的重载方法二,使用out参数 {
//编译时无法识别这两个参数。 }}// methods that differ only on ref and out"
但是如果这两个方法一个使用ref或者out参数,另外一个不使用这两个参数,则可以进行重载。
class RefOutOverloadExample { public void SampleMethod(int i) //重载方法一,没有使用ref参数 { } public void SampleMethod(ref int i) //重载参数二,使用了ref参数,可以通过编译 { } }