C# Ref参数引发的思考
2008-06-13 14:17
651 查看
先看代码:
using System;
using System.Collections.Generic;
using System.Text;
namespace testRef{
class testRef{
private static void ChgArrVal(int[] array){
for (int i = 0; i < array.Length; i++ )
array[i] = (int)Math.Pow(array[i], 2);
}
private static void ChgVal(int i) {
i = (int)Math.Pow(2, i);
}
private static void ChgValRef(ref int i) {
i = (int)Math.Pow(2, i);
}
static void Main(string[] args){
int[] arr = new int[] { 3, 4, 5, 6, 7, 8 };
int val = 5;
Console.WriteLine("original: "+ val);
ChgVal(val);
Console.WriteLine("ChgVal: "+ val);
Console.WriteLine("#####");
Console.WriteLine("original: "+ val);
ChgValRef(ref val);
Console.WriteLine("ChgValRef: "+ val);
Console.WriteLine("#####");
foreach(int a in arr)
Console.WriteLine(">>>" + a);
ChgArrVal(arr);
Console.WriteLine("#####");
foreach (int b in arr)
Console.WriteLine(">>>>" + b);
}
}
}
-------------------以下是运行结果:
Output:
original: 5
ChgVal: 5
#####
original: 5
ChgValRef: 32
#####
>>>3
>>>4
>>>5
>>>6
>>>7
>>>8
#####
>>>>9
>>>>16
>>>>25
>>>>36
>>>>49
>>>>64
続行するには何かキーを押してください . . .
###########################
你看出来了吗?本来Ref的本意是
The ref keyword causes arguments to be passed by reference.参数的引用传递,就是说引用过去,执行完了,不用返回值也能改变原变量的值.但是你看数组不用Ref就可以.可见数组的使用的时候,就是一个地址引用而已,并不是实际的操作,要不怎么不用Ref都可以改变呢?
呵呵,不知道对不对,自己觉得是这样吧.
using System;
using System.Collections.Generic;
using System.Text;
namespace testRef{
class testRef{
private static void ChgArrVal(int[] array){
for (int i = 0; i < array.Length; i++ )
array[i] = (int)Math.Pow(array[i], 2);
}
private static void ChgVal(int i) {
i = (int)Math.Pow(2, i);
}
private static void ChgValRef(ref int i) {
i = (int)Math.Pow(2, i);
}
static void Main(string[] args){
int[] arr = new int[] { 3, 4, 5, 6, 7, 8 };
int val = 5;
Console.WriteLine("original: "+ val);
ChgVal(val);
Console.WriteLine("ChgVal: "+ val);
Console.WriteLine("#####");
Console.WriteLine("original: "+ val);
ChgValRef(ref val);
Console.WriteLine("ChgValRef: "+ val);
Console.WriteLine("#####");
foreach(int a in arr)
Console.WriteLine(">>>" + a);
ChgArrVal(arr);
Console.WriteLine("#####");
foreach (int b in arr)
Console.WriteLine(">>>>" + b);
}
}
}
-------------------以下是运行结果:
Output:
original: 5
ChgVal: 5
#####
original: 5
ChgValRef: 32
#####
>>>3
>>>4
>>>5
>>>6
>>>7
>>>8
#####
>>>>9
>>>>16
>>>>25
>>>>36
>>>>49
>>>>64
続行するには何かキーを押してください . . .
###########################
你看出来了吗?本来Ref的本意是
The ref keyword causes arguments to be passed by reference.参数的引用传递,就是说引用过去,执行完了,不用返回值也能改变原变量的值.但是你看数组不用Ref就可以.可见数组的使用的时候,就是一个地址引用而已,并不是实际的操作,要不怎么不用Ref都可以改变呢?
呵呵,不知道对不对,自己觉得是这样吧.
相关文章推荐
- [读书笔记]参数out和ref-CLR via C# edition3
- 浅谈c#的三个高级参数ref out 和Params
- C# 参考之方法参数关键字:params、ref及out
- 有关.NET参数传递的方式引发的思考
- C#中引用型参数ref和输出参数out的区别
- c#.net中参数修饰符ref,out ,params得区别
- [VB转C#]少见的错误:编译错误:ref或out参数必须是一个lvalue
- 深入理解C#之 参数传递 ref out params
- C#方法参数传递-同时使用ref和out关键字
- 用MSIL剥开C#的外衣(一):方法参数ref、out、params和lock、for和foreach关键字
- c#中的ref、out、params参数
- 用MSIL剥开C#的外衣(一):方法参数ref、out、params和lock、for和foreach关键字
- 函数参数----一道简单问题引发思考
- C#的方法参数--params、ref、out
- C#中方法参数 ref 与 out 的区别
- C# 参考之方法参数关键字:params、ref及out
- 由JVM引发的思考_JVM参数配置
- maven命令-P 参数引发的思考
- C#中ref、out类型参数的区别和params类型参数的用法
- C# 参数-ref 参数、out 参数和 params type[] 参数数列(转)