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,也会对其忽略,值保留修改后的值。
本人菜鸟,请指点···谢谢···
更多精彩原创心得,请关注微信公众号: 梯形