在值类型上使用OUT或者REF关键字与用传值的方式来传递引用类型的参数在某种程序上具体相同的行为。对于前一种情况,OUT和REF关键字允许被调用方法直接操作一个值类型实例,调用代码必须为该实例分配内存,而被调用方法操作该内存。对于后一种情况,调用代码负责为引用类型对象分配内存,而被调用方法通过传入的引用(指用)来操作对象。
最好举例来解释

解决方案 »

  1.   

    其实,你把那段话中的分配内存改为创建对象,操作内存改为对对象进行操作,即可明白。
    用一个方法来作为例子:
    public void Foo(int i1, ref int i2, out int[] i3)
    {
        i1 = 1;
        i2 = 2;
        i3 = new int[2];
        i3[0] = 1;
        i3[1] = 2;
    } 调用代码:
       int a = 0;
       int b = 0;
       int[] c = null;
       Foo(a, b, c);
       Console.WriteLine("a={0}, b={1}", a, b);
       for(int i=0; i<c.Length, i++)
           Console.WriteLine("c[{0)]={1}", i, c[i]);对比调用Foo前和Fool后的a,b,c的值,你应该明白怎么回事了。
      

  2.   

    OUT 相当于  return 出来的,out 是多个返回值的扩展
    ref 是按引用传递传入如是必须是已经实列的对象,主要用量更改或编辑对象//ref 引用传递,传入时对象必须存在
    hastable abc = new Hashtable();
    GetHashtable(ref abc);//Out 的是不用实力华的
    hastable abc;
    GetHashtable(out abc);//return 方式的
    hastable abc;
    abc = GetHashtable();//如果是这样的函数使用,要比 ref 的方便的多
    bool GetXXXX(out hastable  abc,out hastable  def ,out hastable ght)
    不用先实列化hastable 就可以用