微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C#方法参数传递-同时使用ref和out关键字

方法参数传递中,可以同时使用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,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在调用前不需给调用方法中的参数赋初值,参数在实际方法体中初始化。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐