zoukankan      html  css  js  c++  java
  • 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, 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在调用前不需给调用方法中的参数赋初值,参数在实际方法体中初始化。

  • 相关阅读:
    009-LSTM网络-长短记忆网络
    008---递归神经网络-RNN
    007-卷积神经网络03-前向传播-反向传播
    006-卷积神经网络02-池化层,全连接层
    005-卷积神经网络01-卷积层
    004-神经网络
    003-神经网络基础-最优化,前向传播,反向传播
    002-神经网络基础-得分函数,SVM损失函数,正则化惩罚项,softmax函数,交叉熵损失函数
    001-神经网络基础-K近邻算法
    DBSCAN聚类算法
  • 原文地址:https://www.cnblogs.com/shiyh/p/6705674.html
Copyright © 2011-2022 走看看