C# 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都可以改变呢?
呵呵,不知道对不对,自己觉得是这样吧.

posted @ 2008-06-13 14:17  荖K  阅读(917)  评论(1编辑  收藏  举报