C#中ref和out的相关知识
来源:互联网 发布:ios与js的交互 编辑:程序博客网 时间:2024/05/22 12:09
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都可以把变量从值传递变换为引用传递。
1 0
- C#中ref和out的相关知识
- c#中ref和out的区别
- C#中out和ref的区别
- C#中out和ref的区别
- C#中ref和out的区别
- C#中ref和out的区别
- c#中ref和out的区别
- C#中out和ref的区别
- C#中ref和out的区别
- C#中ref和out的区别
- C#中ref和out的区别
- C#中out和ref的区别
- C#中ref和out的区别
- C# 中out和ref的区别
- C#中ref和out的区别
- C#中ref和out的区别
- C#中ref和out的区别
- C#中out和ref的区别
- 限制textfield动态只能输入数字和字母且有长度限制
- 模式识别(Pattern Recognition)学习笔记(十四)--多类线性判别函数
- 重识JavaScript(八)
- Win10下React Native环境安装教程及错误处理办法(实测)
- 我迷茫的IT工作之路(六)转战其他行业
- C#中ref和out的相关知识
- 你必须了解的Session的本质
- 【noip普及组2016】第四题“魔法阵”
- maven 打war包配置文件中的中文注释乱码
- 表达式求值
- elasticsearch-analysis-ik
- windows 10如何从BIOS+MBR更改成UEFI+GPT启动
- 在mac系统安装Apache Tomcat的详细步骤
- 模式识别(Pattern Recognition)学习笔记(十五)--机器学习的范化能力(推广能力)