经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C# » 查看文章
C#中ref关键字的用法
来源:jb51  时间:2022/8/1 9:57:20  对本文有异议

在C#中,如果在方法参数前面加上ref关键字,说明参数传递的是引用,而不是值。如何理解呢?

参数是简单类型的例子

  1. static void Main(string[] args)
  2. {
  3. string temp = "a";
  4. Change(temp);
  5. Console.WriteLine(temp);
  6.  
  7. ChangeByRef(ref temp);
  8. Console.WriteLine(temp);
  9. Console.ReadKey();
  10. }
  11.  
  12. private static void Change(string temp)
  13. {
  14. temp = temp + "--changed";
  15. }
  16.  
  17. private static void ChangeByRef(ref string temp)
  18. {
  19. temp = temp + "--refchanged";
  20. }

输出结果:

a
a--refchanged

  • 在Change()方法中,虽然改变了temp的值,但方法没有返回值,打印temp依然是初始值a;
  • 在ChnageByRef()方法中,由于加上了关键字,虽然也没有返回值,当改变temp的值后,temp的引用地址发生了改变,再次打印,temp的值为新的引用地址对应的值。

参数是类类型的例子

  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. Pet p = new Pet(){Age = 5};
  6. Console.WriteLine("初始年龄是:{0}", p.Age);
  7. ChangeAge(p);
  8. Console.WriteLine("改变pet的属性值后,年龄是:{0}", p.Age);
  9. ChangeAgeByRef(ref p);
  10. Console.WriteLine("改变pet引用地址后,年龄是:{0}", p.Age);
  11. Console.ReadKey();
  12. }
  13.  
  14. private static void ChangeAge(Pet p)
  15. {
  16. p.Age = 10;
  17. }
  18.  
  19. private static void ChangeAgeByRef(ref Pet p)
  20. {
  21. p = new Pet(){Age = 20};
  22. }
  23. }
  24.  
  25. public class Pet
  26. {
  27. public int Age { get; set; }
  28. }

输出结果:

  • 在ChangeAge()方法中,改变的是Pet实例的属性值。
  • 在ChangeAgeByRef()方法中,改变的Pet实例的引用地址。

总结

方法参数无论是简单类型,还是类类型,当在其前加上ref关键字后,对参数的赋值,实际上是改变的是方法参数变量的引用地址。使用ref注意点:

  • 使用带ref的方法之前,需要给方法参变量赋上初始值
  • 无论是定义方法还是使用方法,都要带上关键字ref

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对w3xue的支持。如果你想了解更多相关内容请查看下面相关链接

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号