引用类型总是那么神秘,原因就是因为它存储的是内存地址,对于一个引用类型的变量来说,你在进行赋值操作时,实现上是以地址的形式传递的,当你在代码段中对一个引用类型操作时,他会反应到原对象上,以下我说几个引用类型常见的用法:
情况一:定义集合变量后,修改它的内容元素,会影响原对象吗?
答:对的,会反映到元集合上
代码:
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属性"; }