首先非常感谢Justin Shen ,hBifTs ahnan ,你们的评论使我对此有了更深的了解,但为了完整性,我再罗嗦罗嗦传值还是传参!
在c#里,给我们提供了两种类型的pass by reference方式:out与ref.

1:首先看一下以out关键字标识的传参方式: 
        A:在被调用方法中任何对参数的改变,都会影响到调用方法中传递给此参数的变量的改变。
        B:声明out parament,能够是被调用方法返回多个值,可以声明多个out parament。当然也可以声明一个对象专门来返回多 个值。
        C:传递给out parament参数的变量不必被初始化,但被调用函数在返回前必须给out parament赋值。
2:以ref关键字表示的传参方式:
        A:在被调用方法中任何对参数的改变,都会影响到调用方法中传递给此参数的变量的改变。
        B:传递给out parament参数的变量必须被初始化,所以不适合用来返回多个值的用法。
可以看出,out与ref两种方式,主要的区别在于传递给参数的变量是否需要被初始化。需要注意的是,在out方式中,即使传
递给out param的变量已经被初始化,在被调用函数中还一定要进行assign操作,否则会报错(Use of unassigned local variable 'o')。
比如:
         public static void Main() 
    
         Test first = new Test();
         Change(out first);
        if(first == null)
            Console.WriteLine("Sorry,first is changed by Change method");
        else
            first.Print();
     }
     public static void Change(out Test o)
     {
         o = new Test(); //如果缺少这一条语句的化,不会通过编译的,因为o没有被赋值,即使first已经被初始化了。
                         //若以ref方式传递,有没有这条语句都不会报错。
         o.Name = "It's Changed String";
         o = null;
     }

运行结果:
Sorry,first is changed by Change method
总结:
1:传值方式:

2 :引用方式:
     


posted on 2004-03-28 12:10  我爱妞妞我  阅读(1269)  评论(2编辑  收藏  举报