引用类型总是那么神秘,原因就是因为它存储的是内存地址,对于一个引用类型的变量来说,你在进行赋值操作时,实现上是以地址的形式传递的,当你在代码段中对一个引用类型操作时,他会反应到原对象上,以下我说几个引用类型常见的用法:

情况一:定义集合变量后,修改它的内容元素,会影响原对象吗?

答:对的,会反映到元集合上

代码:

            List<Yinyong> yiyi = new List<Yinyong> { new Yinyong { ID = 1, Name = "zzl" }, new Yinyong { ID = 2, Name = "bobo" } };yiyi[0].Name = "修改zzl";//其它业务Console.WriteLine(yiyi[0].Name);//结果:修改zzl

情况二:定义集合变量后,将它的部分元素添加到另一个集合中,在另一个集合中修改它的元素,是否会反映到原集合?

答:会的,会反映到元集合上

代码:

            List<Yinyong> yiyi = new List<Yinyong> { new Yinyong { ID = 1, Name = "zzl" }, new Yinyong { ID = 2, Name = "bobo" } };List<Yinyong> temp = new List<Yinyong>();temp.AddRange(yiyi.Where(i => i.ID == 1));foreach (var item in temp){item.Name = "修改name";}//结果:修改name

情况三:定义集合变量后,将它以参数的形式传给其它方法,在其它方法中修改这个对象,是否会反映到原方法的原集合上?

答:会的,会反映到元集合上

代码:

  static void Main(string[] args){List<Yinyong> yiyi = new List<Yinyong> { new Yinyong { ID = 1, Name = "zzl" }, new Yinyong { ID = 2, Name = "bobo" } };ModifySet(yiyi);}/// <summary>/// 修改yiyi这个对象,而这个对象是在主方法里定义的/// </summary>/// <param name="yiyi"></param>static void ModifySet(List<Yinyong> yiyi){yiyi[0].Name = "修改第一个元素的name属性";}

好了,掌握了上面三点之后,我们在写代码时会更加得心应手,我们只有掌握好基础知识,才能设计出更好的程序!

转载于:https://www.cnblogs.com/lori/p/3339220.html

陷阱~关于引用类型,请不要模棱两可!相关推荐

  1. c专家编程/c陷阱_编程中的进取陷阱

    c专家编程/c陷阱 "Gumption traps" are a term introduced by Robert M. Pirsig in Chapter 26 of Zen ...

  2. python timeit class Timer()类 timeit(string, string) repeat(string, string) default_timer() 耗时检测 执行速度

    #! /usr/bin/env python3"""Tool for measuring execution time of small code snippets. 用 ...

  3. maven java1.7_本周Java技巧#7 – Maven慢吗?

    maven java1.7 本周Java本周技巧是有关Maven的上一期的后续内容. 第一个视频介绍了与Maven依赖关系有关的方面. 该视频将介绍一些加快Maven构建速度的技术. Maven慢吗? ...

  4. 漫反射 高光反射_如何有效地使用反射

    漫反射 高光反射 本文是我们名为" 高级Java "的学院课程的一部分. 本课程旨在帮助您最有效地使用Java. 它讨论了高级主题,包括对象创建,并发,序列化,反射等. 它将指导您 ...

  5. 科技爱好者周刊(第 168 期):游戏《底特律:变人》

    这里记录每周值得分享的科技内容,周五发布. 本杂志开源(GitHub: ruanyf/weekly),欢迎提交 issue,投稿或推荐科技内容. 周刊讨论区的帖子<谁在招人?>,提供大量程 ...

  6. 6大热门开源自动化测试框架【建议收藏】

    如果您正在考虑构建自己的测试自动化框架,请在自荐之前,参考一下以下的六大热门自动化测试框架. 在大多数情况下,您将会很好地考虑一个或多个可用的开放源代码选项.这是因为一般来说,框架是可以在团队中使用的 ...

  7. 最近很火的微信炸屎功能该怎么用?

    点击上方蓝色"终端研发部",选择"设为星标" 学最好的别人,做最好的我们 最新微信安卓内测版更新到8.0.6版本,更新了几个功能,有实用的也有比较沙雕的, 趁热 ...

  8. db2 使用db2pd 进行监视和故障诊断

    因为 db2pd 工具可从 DB2® 内存集合迅速返回即时信息,所以该工具可用于故障诊断. 该工具不需要获得任何锁存器或使用任何引擎资源就可以收集信息.因此,在 db2pd 收集信息时,有可能(并且预 ...

  9. JavaScript 反混淆的一般套路和技巧[起][承][转][结]

    https://www.blackglory.me/javascript-deobfuscate-general-routines-and-tips-chapter-1/ 最近发现网上没有什么专门深入 ...

最新文章

  1. 处理器解决物联网和人工智能的融合
  2. 多喜临门,BCH币价应声上涨
  3. Java并发机制的底层实现原理
  4. python cgitb_python CGI 编程实践
  5. 删除本地git的远程分支和远程删除git服务器的分支
  6. vSpere虚拟网卡介绍
  7. ABB (2020牛客国庆集训派对day1)
  8. java oracle 字符_Oracle转义字符
  9. dlib 怎么安装vs2017_win10中的dlib库安装过程
  10. 根据一个数字日期,判断这个日期是这一年的第几天
  11. SQL服务器引擎组件概览
  12. linux 用户管理 指令,Linux 用户管理常用命令
  13. Git 代码管理常用命令
  14. java操作ElasticSearch(es)进行增删查改操作
  15. 网页素材大宝库:20套精美的清爽风格图标素材
  16. webpack-dev-server 设置反向代理解决跨域问题
  17. 大数据预测分析是否对企业有影响
  18. Linux/Unix 中 wheel 组的来源
  19. 优秀的产品管理促进了IBM的成功转型--和谐生产方式百题03
  20. OpenCV对图片的读写,像素值的访问,修改

热门文章

  1. 身为 Java 程序员必须掌握的 10 款开源工具!
  2. 数据统计脚本(一周)
  3. 心中的象牙塔:怎样才能拿到理想的教职offer?
  4. 她是直播聊学习成“网红”的北大博士,毕业后入职民办学校,年薪70万
  5. 一个函数打天下,einsum
  6. 暴力裁员?小米回应来了,网友表示没毛病!
  7. 哈哈哈,这个教人写出烂代码的项目在 GitHub 上火了...
  8. 为什么我会重回到Windows的怀抱?
  9. 在坚持了15年后,我毅然决定离开 Linux,投入 Mac 的怀抱
  10. 推荐一款神器:在浏览器中运行 vscode,随时随地写代码