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在調用前不需給調用方法中的參數賦初值,參數在實際方法體中初始化。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM