方法参数传递对象时声明选项的注意问题
方法参数可以有以下几种选项限定
ref
out
params
params没什么好说的,String.Format方法是个典型现成的例子;
ref?好像也没什么,不就是传递引用嘛,大家应该都知道,当传递对象参数时默认是传递引用的,是不是说当参数为对象时,写不写ref都是一样的,out好像没怎么用过,呵呵:
public class A
{
public int num;
}
public class B
{
public static void SetA1(A a)
{
if (a == null) return;
a.num = 1;
}
public static void SetA2(A a)
{
a = new A();
a.num = 1;
}
public static void SetA3(ref A a)
{
a = new A();
a.num = 1;
}
public static void SetA4(out A a)
{
a = new A();
a.num = 1;
}
}

示例1:
A clsA=new A();
clsA.num=0;
B.SetA1(clsA);
MessageBox.Show(clsA.num.ToString()); //num是0还是1???
示例2:
A clsA = null;
B.SetA2(clsA);
MessageBox.Show(clsA.num.ToString()); //is work ?呵呵,当然不,注意clsA还是null
示例3:
//要想按示例2的方式调用,ref就有用了
A clsA = null;
B.SetA3(ref clsA);
MessageBox.Show(clsA.num.ToString()); // OK!
示例4:
//按示例2的方式调用,用out也可以,区别在哪呢?
A clsA; //呵呵,编译器是不会报告“使用了未赋值的局部变量”的,不过SetA4就有相应的要求了
B.SetA4(out clsA);
MessageBox.Show(clsA.num.ToString());


浙公网安备 33010602011771号