重新学习C#(二)——ref方法

0.参考链接

c#---ref参数 https://www.cnblogs.com/huangxuQaQ/p/10729367.html

浅析ref、out参数 https://www.cnblogs.com/vd630/p/4601919.html

1.参考代码

ref参数:将变量带入一个方法中改变之后在带出方法,ref参数在方法外也就是调用方法之前必须为其赋值

static void Main(string[] args)
{
     int n1 = 10;
     int n2 = 100;
     Program.Test(ref n1, ref n2);
     Console.WriteLine(n1);
     Console.WriteLine(n2);
     Console.ReadKey();
}

public static void Test(ref int n1, ref int n2)
 {
     int temp = n1;
     n1 = n2;
     n2 = temp;
 }

2.基本概念

按引用传递的参数算是C#与很多其他语言相比的一大特色,想要深入理解这一概念应该说不是一件容易的事,再把值类型和引用类型给参杂进来的话就变得更加让人头晕了。经常看到有人把按引用传递和引用类型混为一谈,让我有点不吐不快。再加上前两天碰到的一个有意思的问题,让我更加觉得应该整理整理关于ref和out的内容了。

ref和out用起来还是非常简单的,就是在普通的按值传递的参数前加个ref或者out就行,方法定义和调用的时候都得加。
ref和out都是表示按引用传递,CLR也完全不区分ref还是out。

大概情况类似于这样:

按值传递时就像是这样:

可以看到,不管方法内部对“值”和“B引用”作什么修改,两个变量包含的信息是不会有任何变化的。
但是也可以看到,方法内部是可以通过“B引用”对“引用类型对象”进行修改的,这就出现了前文所说的发生在List上的现象。
而按引用传递时就像是这样:

可以看到,这个时候方法内部是可以通过“引用”和“A引用”直接修改变量的信息的,甚至可能发生这样的情况:

发布了363 篇原创文章 · 获赞 32 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_35789421/article/details/104407341
今日推荐