日期:2014-05-19  浏览次数:20395 次

急求一个C#问题,请大家指点以下,面试用到的!!
简述下面函数的区别:
private   void   test(string   str){...}
private   void   test(ref   string   str){...}
private   void   test(out   string   str){...}

------解决方案--------------------
private void test(string str){...}
传入string类型参数,无返回值
private void test(ref string str){...}
传入ref string类型参数需要先初始化str
private void test(out string str){...}
传入out string类型参数不用事先初始化str

好像是这样

------解决方案--------------------
1. private void test(string str){...} 定义一个私有属性的 没有返回值得 带一个string参数的方法


2. private void test(ref string str){...}跟第一个不一样的地方是ref是调用参数的引用而不是值调用。 str在改方法内进行的任何改变都将保存 例如:
string a= "100 ";
test(a);
Console.WriteLine(a); //显示100

test(ref a);
Console.WriteLine(a); //显示100200

private void test(string str){ str+= "200 "; }
private void test(ref string str){ str+= "200 "; }

3. private void test(out string str){...} 表示参数传入前可以不给定义。

例如: string a;
test(out a);

test(out a){...}
假如没有out参数 则编译出错,提示a没有定义初始值。
------解决方案--------------------
Iceguy(Snow)正解
out跟ref的区别就是out不用初始化
------解决方案--------------------
out另外一个作用是可以在一个函数中返回多个参数。

such as : out string A,out string B 同时作为函数test(out string A ,out string B)的参数,在函数内赋值。

则一旦执行了test函数,A B的就都有值。
------解决方案--------------------
ref 的参数为引用参数,变量被传进去修改后能把修改后的值保存下来,但改变量必须在传入之前赋值。
out 跟ref的区别就是变量传入之前不需要赋值
------解决方案--------------------
第一个是值传递 在传递的过程中不会改变原来的值

最后两个是地址传递 会改变原来的值

引用:zhzhuo(编程混饭)
传入ref string类型参数需要先初始化str
传入out string类型参数不用事先初始化str