值和引用参数
值:只是将值的一个副本传递,因此不因原变量的值。
引用:传递的是引用的一个副本,(对相同数据的另一个引用),因此要改变原数据(字符串另解)
ref,out方法参数
ref:正被传递的参数指向与正被调用代码中的变量的同一内存地址(在调用前对传递的参数进行初始化)
out:同上,可以在调用之前不对参数进行初始化,但是必须在调用的方法内修改out参数
总结:在为out参数赋值前不能使用它,而且在从方法返回前必须为它赋值。
public class Class1
{
public Class1(){}
protected Class1(int i){}
public int ID;
}
public class myclass
{
/* public Class1 chaObject(out Class1 ref1)
{
ref1.ID = ref1.ID * 2;
return ref1;
}
public Class1 chaObject(out Class1 ref1)
{
ref1.ID = 4;
return ref1;
}
public Class1 chaObject(out Class1 ref1)
{
int x = ref1.ID;
ref1 = new Class1();
ref1.ID = x * 2;
return ref1;
}*/
public Class1 chaObject(out Class1 ref1)
{
ref1 = new Class1();
ref1.ID = 99;
return ref1;
}
}
public class Test
{
static void Main(string[] args)
{
myclass mc = new myclass();
Class1 ref1 = new Class1();
ref1.ID = 3;
Class1 ref2 = mc.chaObject(out ref1);
}
}
被注释掉的地方,为编译无法通过的。
总结:如果通过值传递引用,那么就是在传递引用的副本;如果通过引用传递引用,那我们实际上是在传递原来的引用。