ref与out

 一、 ref    

下面的代码主要是说了这么个事,有引用类型(数组 int[] ints)和值类型(int i) ,这两个有相同的初始值都是0 。通过方法对这两个进行修改,
输出之后数组值是100,整型还是0。
继续看······

1
class Program 2 { 3 static void founction(int[] ints, int i)//定义方法,通过数组传值和通过整型传值(就是一个引用传值和一个值传参) 4 { 5 ints[0] = 100;//方法里,对引用进行修改。 6 i = 100; //对整型进行修改。 7 } 8 9 10 11 12 public static int Main() 13 { 14 int i = 0; 15 int[] ints = { 0, 1, 2, 3, 4 }; 16 17 //输出原始数据 18 Console.WriteLine("数组引用原始数据:"+ints[0]);// ints[0]=0 19 Console.WriteLine("值类型原始数据:"+i); // int i = 0 20 Console.WriteLine("*******************************************"); 21 22 23 //调用方法进行传参 24 founction(ints, i); 25 26 27 //输出传参之后的改变数据 28 29 Console.WriteLine("数组引用原始数据:" + ints[0]);// ints[0]=100 30 Console.WriteLine("值类型原始数据:" + i); // int i = 0 31 Console.ReadLine(); 32 return 0; 33 34 } 35 }




** 上面的代码很简单,可是我们通过上面知道了。值类型传参对其进行修改是无效的,而引用类型是可以的。我们想让值类型传参拥有引用类型传参的效果,
就是可以对其修改,对初值产生影响。那我们就加上ref关键字。就在方法传值处加上 ref。

修改如下:

 static void founction(int[] ints, ref int i)//使其值类型拥有引用类型的效果 
     {
           ints[0] = 100;       
     i = 100;      //这样使 在方法中,对值类型修改的值可以对初值产生影响。    i=100 啦
   }

**当然要一一对应啦,调用方法中也应该一一对应,修改为:
 
founction(int[] ints,  ref int i)//

总结:(1)ref关键字,迫使值类型通过引用来传递。
(2)在方法中注明ref,同事调用是也应该参数一致。


二、out
说明: 你不想让值类型有初值。不想引起混乱。
看下面代码···
 class Program
    {
        static void founction( out int     i
   {

     i = 100;

   }
public static int Main() { int i; //加了out,就可以不对值类型进行初始化了。
    founction(ints, out i); Console.WriteLine("值类型数据:" + i); // int i = 100
Console.ReadLine(); return 0; }



总结:out ,可以让你吐槽,允许可以不对值类型初始化,即使你初始化了,加了out,也会对其忽略,值保留修改后的值。

本人菜鸟,请指点···谢谢···





























原文地址:https://www.cnblogs.com/sunchong/p/2555460.html