1. 程式人生 > >C#中ref和out的區別

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;
    }*/
}