由C#关键字ref想到的

不是一个喜欢抠文法的人,但对C#里面的ref很感兴趣。C#里面有很多数据类型都是引用类型的,作为参数传递时,是无需要拷贝的。因此ref主要修饰的不是引用类型,而是值类型(以及string这种特殊的引用类型).那是不是除string外的引用类型都不要ref呢,我认为答案是否定的,下面的代码比较有意思,有很多人不仔细看,还看不出list的变化。

  1: static void Main(string[] args) 
  2: { 
  3:     List<string> list = new List<string>(); 
  4:     Test test = new Test(); 
  5:     test.AddOne(list);    //执行该条语句后 list集合元素个数为0个 
  6:     test.AddTwo(list);    //执行该条语句后 list集合元素个数为1个 是“2” 
  7:     test.AddTree(ref list);执行该条语句后 list集合元素个数为1个 是“3” 
  8: } 
  9: class Test 
 10: { 
 11:     public void AddOne(List<string> l) 
 12:     { 
 13:         List<string> ll = new List<string>(); 
 14:         ll.Add("1"); 
 15:         l = ll; 
 16:     } 
 17:     public void AddTwo(List<string> l) 
 18:     { 
 19:         l.Add("2"); 
 20:     } 
 21:     public void AddTree(ref List<string>l) 
 22:     { 
 23:         List<string> ll = new List<string>(); 
 24:         ll.Add("3"); 
 25:         l = ll; 
 26:     } 
 27: 
 28: }
 29: 
 30: 

AddOne函数里,传进去的list指向了另一个地址,函数返回时,list里面的元素是0个。

AddTwo函数不用说,无疑问。函数返回时,list里面有一个元素为”2”.

AddThree函数,传进去的list也指向了另一个地址,函数返回时,list里面的只有一个元素为”3”

那我可不可认为C#里面的ref和C++里面的&有着本质的区别?我们在平时写代码传递参数(该参数需要返回)时不管是引用类型还是值类型,是否都应该加上ref修饰,我们也许会调用别人写的函数,这样我们不确定我们传进去的参数会做怎样的处理。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部