【C#】 之 out和ref
来源:互联网 发布:爱龟吧淘宝草龟 编辑:程序博客网 时间:2024/04/29 16:23
默认传参:
参数传入函数的默认行为是按值传递。传入方法中的参数是原始数据的副本。
以下是一个小例子:
public static int Add( int x, int y) { int ans=x+y; x=100000; y=800000; return ans; } static void Main(string[] args) { int x = 9, y = 10; Console.WriteLine("在调用之前:x={0},y={1}", x, y); Console.WriteLine("在调用之后:x={0},y={1},ans={2}", x, y, Add(x, y)); Console.ReadLine (); }其中我们在调用的参数中将x和y重新赋值,但它改变的只是原始数据的一个副本,所以原始数据不会产生影响。最后的结果如下
Out传参:
Out传参其实就是把参数传出去,从方法中传出去。
static void Add( out int x, int y,out int ans) { x = 100000; y = 800000; ans = x + y; } static void Main(string[] args) { int x=9; int y=10; int ans=0; Console.WriteLine("在调用之前:x={0},y={1},ans={2}", x, y,ans); Add( out x, y,out ans); Console.WriteLine("在调用之后:x={0},y={1},ans={2}", x,y,ans); Console.ReadLine(); }
正从最后的结果可以看出只有y之没有改变,虽然y值在方法中被重新赋值了,但是它并没有传出来,所以还是原值。
Ref传参:
Ref传参是引用传参,引用参数必须在他们被传递给方法之前初始化,因为方法在退出之前必须为输出参数赋值。
static void Add(ref int x, int y, out int ans) { x = 100000; y = 800000; ans = x + y; } static void Main(string[] args) { int x = 9; int y = 10; int ans = 0; Console.WriteLine("在调用之前:x={0},y={1},ans={2}", x, y, ans); Add(ref x, y, out ans); Console.WriteLine("在调用之后:x={0},y={1},ans={2}", x, y, ans); Console.ReadLine(); }
通过输出可以看到x的值已经被修改了。
总结:
通过上面的三个小例子可以看出,默认传参只是把我们的一个值的副本传递给函数方法,而函数在自己里面对值干了什么,原值是无所谓的,我们要这个方法最后return的那个结果就好了。
而out传参其实就是把函数中的参数给传出来,默认传参不是只能返回个值嘛,out就牛多了,想把哪个传回来就把哪个传回来。
至于ref传参,那就是个引用,对原值的引用,方法把原值改成什么样子就是什么样子,改了就是改了。这里有时候和out从结果上看差不多,但是不太一样,out返回来取代原来的,ref是直接就改了。
以上就是我的理解了。。
——本学习总结参考书籍为《精通C#》作者:Andrew Troelsen
0 0
- 【C#】 之 out和ref
- 【C#】ref 和 out
- c#ref和out区别
- c#ref和out区别
- 浅谈C#ref和out
- 【C#】ref和out关键字
- c#:使用 ref 和 out 传递数组
- C#.NET:ref和out的区别
- C#.NET:ref和out的区别
- C#.NET:ref和out的区别
- 【C#】——out和ref区别
- [C#]Out Ref
- c#ref与out
- c#params ref out
- ref和out 转贴
- 关于ref和out
- ref和out参数
- 关于ref和out
- 聊天中的小箭头
- Linux下进程信息的深入分析
- iOS清除WebView的缓存
- 网络编程之UDP协议
- linux sort 命令详解
- 【C#】 之 out和ref
- css3 新增属性集合
- 全站 HTTPS 来了
- 七种降维方法
- 高手的Blog及ACM好的网站[转]
- [leetcode] 232. Implement Queue using Stacks 解题报告
- 程序员如何谋划出月薪3万
- redis 队列 生产者 消费者模式
- 五大理由分配你的告警