由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修饰,我们也许会调用别人写的函数,这样我们不确定我们传进去的参数会做怎样的处理。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值