C#提供了ref参数修饰字,用于按引用把值对象传给方法。就像delphi的var 参数修饰符号
ref参数是指向实际原值的引用,就好像说:"是这儿,对它进行操作"
值参数是副本,就好像说:"是这儿,对与它一样的那个对象进行操作"
类像是一个房间,类引用像是一把钥匙。要对类(房间)内部操作,需要类引用(钥匙).
public class Test
{
private int a;
public int A
{
get { return a; }
set { a = value; }
}
}
private void ChangeTest1(Test curTest)
{
curTest.A = 10;
}
private void ChangeTest2(Test curTest)
{
Test newTest = new Test();
newTest.A = 100;
curTest = newTest;
改变了类的地址指向,实际是换了钥匙。没有对原来类进行什么操作。原来类的内容还是原来类的。
}
private void ChangeTest3(ref Test curTest)
{
Test newTest = new Test();
newTest.A = 100;
curTest = newTest;
///ref 是实际原值的引用,对它进行操作,估计这里是照着一个新房间的东西,重新布置原来那个房间了吧。(复制了一下)
///所以原来那个房间的东西也改变了。
}
private void button1_Click(object sender, EventArgs e)
{
Test newTest = new Test();
ChangeTest1(newTest);
MessageBox.Show(newTest.A.ToString());
此结果显示为10
}
private void button2_Click(object sender, EventArgs e)
{
Test newTest = new Test();
ChangeTest2(newTest);
MessageBox.Show(newTest.A.ToString());
此结果显示为0
}
private void button3_Click(object sender, EventArgs e)
{
Test newTest = new Test();
ChangeTest3(ref newTest);
MessageBox.Show(newTest.A.ToString());
此结果显示为100
}
out可以免除参数初始化的要求,就是不用在方法之外初始化。其他的和ref相同。