zoukankan      html  css  js  c++  java
  • 陷阱~关于引用类型,请不要模棱两可!

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

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

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

    代码:

                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属性";
            }
    复制代码
  • 相关阅读:
    笔试题 9.11
    shell脚本编程
    android源码中用到的设计模式
    struts2.0的工作流程
    无奈的信息产业部备案网站流程
    VS2005调试时弹出“无法附加。绑定句柄无效”对话框
    彻底删除项目的VSS源代码管理信息
    软件版本详细介绍
    导入SourceSafe过程中项目结构无法修改问题的解决方案
    建立良好的客户关系=节约项目成本
  • 原文地址:https://www.cnblogs.com/skynetfy/p/3340114.html
Copyright © 2011-2022 走看看