在方法参数传递中,可以同时使用ref和out关键字,但是要注意ref和out参数传递的不同。
using System;
class Program{ static void Main(){ Program obj = new Program(); int score = 55; //声明原来分数 int refscore, outscore; //声明两个变量 obj.ChangeScore(score, ref refscore, out outscore); Console.WriteLine("您原来的分数是{0},调整后的分数为{1},加平时表现分后{2}", score, refscore, outscore); Console.ReadKey();}private void ChangeScore(int score, ref int refscore, out int outscore){ if (score > 50 && score < 60) { refscore = 60; } if (refscore > 60) { outscore = refscore + 5; }}}以上代码编译时会出现两个错误,我们只声明了变量refscore,并没有给变量显示赋值。所以出现第一个错误:使用了未赋值的局部变量“refscore”。out关键字传递参数时,必须被调用方法内修改参数,用if语句判断,只有符合条件的out参数赋值,不符合条件的out参数没有赋值,所以出现了“控制离开方法之前必须对out参数outscore赋值”错误。
using System;
class Program{ static void Main(){ Program obj = new Program(); int score = 55; //声明原来分数 int refscore = 0, outscore; //声明两个变量 obj.ChangeScore(score, ref refscore, out outscore); Console.WriteLine("您原来的分数是{0},调整后的分数为{1},加平时表现分后{2}", score, refscore, outscore); Console.ReadKey();}private void ChangeScore(int score, ref int refscore, out int outscore){ if (score > 50 && score < 60) { refscore = 60; } if (refscore > 60) { outscore = refscore + 5; } else { outscore = refscore; }}}以下内容供参考:
一、值参数与引用参数及输出参数的区别:
1、值参数中实参的值不随形参值变更而变更;形参与实参值互不影响,实参传递给形参时,栈中就为其分配另外一部分空间。这样,两个参数变更时而互不影响。2、引用参数及输出参数中实参的值会随形参值变更而变更;(形参:在定义函数中指定的形参,在未出现函数调用时,它们并不占内存中的存储单元。只有在发生函数调用时,函数中形参才被分配内存单元。在调用结束后,形参所占的内存单元也被释放。调用时将实参的值赋绐形参);引用参数与输出参数中,实参在栈中分配空间。当实参传递给形参时,会将地址传递给形参,即传送的指针,这样形参变更时,实参也会随著变更。二、引用参数与输出参数区别:
1、使用ref与out参数时,方法中参数及调用参数都需要加Ref或out关键字。2、使用ref参数与out参数得到的结果是一样的,区别是:ref在调用前需给调用方法中的参数赋初值。out在调用前不需给调用方法中的参数赋初值,参数在实际方法体中初始化。