C#中ref和out的相关知识
Posted 博士装呗
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中ref和out的相关知识相关的知识,希望对你有一定的参考价值。
C#中变量之间的传递默认是值传递,什么叫值传递呢?就是说,当一个方法需要我事先定义的变量作为参数的时候,默认只是把变量的值传递过去了。
例如:
namespace ConsoleApplication1
class Program
static void A(int x)
Console.WriteLine(x);
x++;
Console.WriteLine(x);
static void Main(string[] args)
int x=0;
A(x);
Console.WriteLine(x);
Console.ReadKey();
A方法需要Main()方法中的变量x作为参数,此时知识把“0”传递给了方法A,A里面做了x++的运算,但是不影响Main()方法里面x的值,折旧相当于A方法中定义了另一个变量y用来承接x,A里面操作的是y,而不是x,因为A里面定义了一个int x,这两个x是不一样的,因为它们指向不同的地址。
那么我们希望Main()和A()都指向同一个地址的x怎么办呢?
那就不用值传递,用引用传递吧,把一个值作为一个引用传递过去。
ref和out就是专门干这种勾当的!
它们的区别是:用ref的时候要确保值已经被赋值了,而有的时候事先赋值没有意义,那就用out;
namespace ConsoleApplication1
class Program
static void A(ref int x) //区别在这里
Console.WriteLine(x);
x++;
Console.WriteLine(x);
static void Main(string[] args)
int x=0;
A(ref x); //区别在这里
Console.WriteLine(x);
Console.ReadKey();
最后输出:
注意,上面的代码中,int x=0;不给它赋值的话就会报错:
不赋值怎么办呢?那就用out呗:
namespace ConsoleApplication1
class Program
static void A(out int x)
x = 2; //这里再给它赋值
Console.WriteLine(x);
x++;
Console.WriteLine(x);
static void Main(string[] args)
int x;
A(out x);
Console.WriteLine(x);
Console.ReadKey();
运行结果:
事实证明:ref和out都可以把变量从值传递变换为引用传递。
以上是关于C#中ref和out的相关知识的主要内容,如果未能解决你的问题,请参考以下文章