static void Main(string[] args)
{
List<string> list = new List<string>();
Test test = new Test();
test.AddOne(list); //执行该条语句后 list集合元素个数为0个
test.AddTwo(list); //执行该条语句后 list集合元素个数为1个 是“2”
test.AddTree(ref list);////执行该条语句后 list集合元素个数为1个 是“3”
}
class Test
{
public void AddOne(List<string> l)
{
List<string> ll = new List<string>();
ll.Add("1");
l = ll;
}
public void AddTwo(List<string> l)
{
l.Add("2");
}
public void AddTree(ref List<string>l)
{
List<string> ll = new List<string>();
ll.Add("3");
l = ll;
}
}
AddOne函数里,传进去的list指向了另一个地址,函数返回时,list里面的元素是0个。
AddTwo函数不用说,无疑问。函数返回时,list里面有一个元素为”2”.
AddThree函数,传进去的list也指向了另一个地址,函数返回时,list里面的只有一个元素为”3”
那我可不可认为C#里面的ref和C++里面的&有着本质的区别?我们在平时写代码传递参数(该参数需要返回)时不管是引用类型还是值类型,是否都应该加上ref修饰,我们也许会调用别人写的函数,这样我们不确定我们传进去的参数会做怎样的处理。
最新评论