C#中ref和out的區別


C#中的ref和out提供了值類型按引用進行傳遞的解決方案,當然引用類型也可以用ref和out修飾,但這樣已經失去了意義。因為引用數據類型本來就是傳遞的引用本身而非值的拷貝。ref和out關鍵字將告訴編譯器,現在傳遞的是參數的地址而不是參數本身,這和引用類型默認的傳遞方式是一樣的。
ref和out的區別:
1、重載:out和ref不能構成重載,編譯器提示:不能定義僅在ref和out的上存在不同的重載方法
eg、

		static void Fun(ref int a,ref int b)
    	{
       		 a = a + b;
        	 b = 6;
    	}
    	static void Fun(out int a,out int b)
    	{
       		 b = 6;
        	 a = 14;
    	}

2、調用前賦值
ref作為參數的函數在調用前,實參必須賦初始值。
out作為參數的函數在調用前,實參可以不賦初始值。

3、函數中,參數賦值
在調用函數中,out引入的參數必須賦值;
而ref引入的參數在返回前可以不賦值;

比較完整的測試代碼:

class Program
{
   static void Main(string[] args)
    {
        int a = 6;
        int b = 66;
        Fun(ref a,ref b);
         //Fun(out a,out b);
        Console.WriteLine("a:{0},b:{1}",a,b);
        Console.ReadLine();

    }
  static void Fun(ref int a,ref int b)
    {
        a = a + b;
       // b = 6;
    }

 	  /*
   static void Fun(out int a,out int b)
    {
        b = 6;
        a = 14;
    }*/
}
----------------------------------------------------------------------------------------------------------------------------------

ref關鍵字用於將方法內的變量改變后帶出方法外。具體我們通過例子來說明:

static void Main(string[] args)
{
int c = 0;
Add(1, 2,ref c);
Console.WriteLine(c);
}
static void Add(int a, int b, ref int c)  
{
c = a + b;
}

最后打印出來的結果是3。如果沒有加ref參數,由於沒有Add()方法沒有返回值,調用后,打印出來的結果仍然是0


免責聲明!

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



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