陷阱~关于引用类型,请不要模棱两可!
引用类型总是那么神秘,原因就是因为它存储的是内存地址,对于一个引用类型的变量来说,你在进行赋值操作时,实现上是以地址的形式传递的,当你在代码段中对一个引用类型操作时,他会反应到原对象上,以下我说几个引用类型常见的用法:
情况一:定义集合变量后,修改它的内容元素,会影响原对象吗?
答:对的,会反映到元集合上
代码:
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
陷阱~关于引用类型,请不要模棱两可!相关推荐
- c专家编程/c陷阱_编程中的进取陷阱
c专家编程/c陷阱 "Gumption traps" are a term introduced by Robert M. Pirsig in Chapter 26 of Zen ...
- 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. 用 ...
- maven java1.7_本周Java技巧#7 – Maven慢吗?
maven java1.7 本周Java本周技巧是有关Maven的上一期的后续内容. 第一个视频介绍了与Maven依赖关系有关的方面. 该视频将介绍一些加快Maven构建速度的技术. Maven慢吗? ...
- 漫反射 高光反射_如何有效地使用反射
漫反射 高光反射 本文是我们名为" 高级Java "的学院课程的一部分. 本课程旨在帮助您最有效地使用Java. 它讨论了高级主题,包括对象创建,并发,序列化,反射等. 它将指导您 ...
- 科技爱好者周刊(第 168 期):游戏《底特律:变人》
这里记录每周值得分享的科技内容,周五发布. 本杂志开源(GitHub: ruanyf/weekly),欢迎提交 issue,投稿或推荐科技内容. 周刊讨论区的帖子<谁在招人?>,提供大量程 ...
- 6大热门开源自动化测试框架【建议收藏】
如果您正在考虑构建自己的测试自动化框架,请在自荐之前,参考一下以下的六大热门自动化测试框架. 在大多数情况下,您将会很好地考虑一个或多个可用的开放源代码选项.这是因为一般来说,框架是可以在团队中使用的 ...
- 最近很火的微信炸屎功能该怎么用?
点击上方蓝色"终端研发部",选择"设为星标" 学最好的别人,做最好的我们 最新微信安卓内测版更新到8.0.6版本,更新了几个功能,有实用的也有比较沙雕的, 趁热 ...
- db2 使用db2pd 进行监视和故障诊断
因为 db2pd 工具可从 DB2® 内存集合迅速返回即时信息,所以该工具可用于故障诊断. 该工具不需要获得任何锁存器或使用任何引擎资源就可以收集信息.因此,在 db2pd 收集信息时,有可能(并且预 ...
- JavaScript 反混淆的一般套路和技巧[起][承][转][结]
https://www.blackglory.me/javascript-deobfuscate-general-routines-and-tips-chapter-1/ 最近发现网上没有什么专门深入 ...
最新文章
- 处理器解决物联网和人工智能的融合
- 多喜临门,BCH币价应声上涨
- Java并发机制的底层实现原理
- python cgitb_python CGI 编程实践
- 删除本地git的远程分支和远程删除git服务器的分支
- vSpere虚拟网卡介绍
- ABB (2020牛客国庆集训派对day1)
- java oracle 字符_Oracle转义字符
- dlib 怎么安装vs2017_win10中的dlib库安装过程
- 根据一个数字日期,判断这个日期是这一年的第几天
- SQL服务器引擎组件概览
- linux 用户管理 指令,Linux 用户管理常用命令
- Git 代码管理常用命令
- java操作ElasticSearch(es)进行增删查改操作
- 网页素材大宝库:20套精美的清爽风格图标素材
- webpack-dev-server 设置反向代理解决跨域问题
- 大数据预测分析是否对企业有影响
- Linux/Unix 中 wheel 组的来源
- 优秀的产品管理促进了IBM的成功转型--和谐生产方式百题03
- OpenCV对图片的读写,像素值的访问,修改