程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#中的ref和out的意義和使用方法

C#中的ref和out的意義和使用方法

編輯:C#入門知識

 

向方法傳遞一個實參時,對應的形參會用實參的一個副本來初始化,不管形參是值類型(例如int),可空類型(int?),還是引用類型,這一點都是成立的。也就是隨便在方法內部進行什麼修改,都不會影響實參的值。例如,對於引用類型,方法的改變,只是會改變引用的數據,但實參本身並沒有變化,它仍然引用同一個對象。

 

        代碼如下:

 

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace ref_out

{

    class Program

    {

        static void Main(string[] args)

        {

            int i = 8;

            Console.WriteLine(i);

            DoIncrease(i);

            Console.WriteLine(i);

        }

 

        static void DoIncrease(int a)

        {

            a++;

        }

    }

}        運行結果如下:

\

 

 

 

 

 

        若使用ref 關鍵字,向形參應用的任何操作都同樣應用於實參,因為形參和實參引用的是同一個對象。PS:實參和形參都必須附加ref 關鍵字做為前綴。

 

        代碼如下:

 

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace ref_out

{

    class Program

    {

        static void Main(string[] args)

        {

            int i = 8;

            Console.WriteLine(i);   // 8

            DoIncrease(ref i);      // 實參前也必須加ref

            Console.WriteLine(i);   // 9 // ref 關鍵字使對形參的動作也應用於實參

        }

 

        static void DoIncrease(ref int a)   // 形參前必須加ref

        {

            a++;

        }

    }

}        運行結果如下:

\

 

 

 

        ref 實參使用前也必須初始化,否則不能通過編譯。

 

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace ref_out

{

    class Program

    {

        static void Main(string[] args)

        {

            int i;          // ref 實參沒有初始化,所以程序不能通過編譯

            Console.WriteLine(i);

            DoIncrease(ref i);

            Console.WriteLine(i);

        }

 

        static void DoIncrease(ref int a)

        {

            a++;

        }

    }

}

        有時我們希望由方法本身來初始化參數,這時可以使用out 參數。

 

        代碼如下:

 

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace ref_out

{

    class Program

    {

        static void Main(string[] args)

        {

            int i;    // 沒有初始化

            //Console.WriteLine(i); // 此處i 未初始化,編譯錯誤

            DoIncrease(out i);  // 用方法來給實參賦初值

            Console.WriteLine(i);

        }

 

        static void DoIncrease(out int a)

        {

            a = 8;  // 在方法中進行初始化

            a++;    // a = 9

        }

    }

}       

運行結果如下:  

\

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved