千家信息网

C#中b=a的多种情况及结果分析

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要介绍"C#中b=a的多种情况及结果分析",在日常操作中,相信很多人在C#中b=a的多种情况及结果分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"C#中b=
千家信息网最后更新 2026年10月31日C#中b=a的多种情况及结果分析

这篇文章主要介绍"C#中b=a的多种情况及结果分析",在日常操作中,相信很多人在C#中b=a的多种情况及结果分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"C#中b=a的多种情况及结果分析"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

两个相同类型的变量a和b,并且有如下关系:

b=a;

如果a发生改变,b是否也发生改变呢?

情况很复杂,分以下几种情况谈论:

1) 单个实体

1. 简单类型

先考察int:

inta=1; intb=a; a=2; Console.WriteLine("b:"+b);

输出结果:

再考察一下string:

stringa="1"; stringb=a; a="2"; Console.WriteLine("b:"+b);

输出结果:

如果不放心,还可以测试一下Enum,结果类似,详见Demo。

结论:简单类型是组成复合类型的最基本单位,是原子,不可再拆分,所以不管是值类型double、int还是引用类型string,b都不随a的改变而改变,因为它们指向全局堆栈(对于string而言是托管堆)上的同一个地址。

2. 复合类型

复合类型是由string、int、double这些简单类型组成的。

分别定义一个复合的引用类型(class)和一个复合的值类型(struct)。

classUserInfo { publicstringUserName; publicintAge; } structUserInfo2 { publicstringUserName; publicintAge; }

先讨论引用类型:

UserInfoa=newUserInfo(){UserName="Baobao",Age=27}; UserInfob=a; a.UserName="AndersLiu"; a.Age=30; Console.WriteLine("b.UserName:"+b.UserName); Console.WriteLine("b.Age:"+b.Age);

输出结果:

结论:b和a仍然指向托管堆上的同一个UserInfo实例的地址。而UserInfo实例的成员又包含着UserName和Age分别在托管堆和全局堆栈上的地址。所以修改a的成员UserName和Age,只是改变这两个成员的地址,而没有改变UserInfo实例的地址,所以b的成员UserName和Age也会跟着改变。

让我们局部修改上面的代码:

UserInfoa=newUserInfo(){UserName="Baobao",Age=27}; UserInfob=a; //a.UserName="AndersLiu"; //a.Age=30; a=newUserInfo(){UserName="AndersLiu",Age=30}; Console.WriteLine("b.UserName:"+b.UserName); Console.WriteLine("b.Age:"+b.Age);

输出结果:

结论:对a重新进行实例化,导致a指向一个新的UserInfo实例的地址。而b仍然指向原先那个UserInfo实例的地址,所以b不会随着a的改变而改变。从此b和a是两个没有任何关系的变量。

再来看一下值类型:

UserInfo2a=newUserInfo2(){UserName="Baobao",Age=27}; UserInfo2b=a; a.UserName="AndersLiu"; a.Age=30; Console.WriteLine("b.UserName:"+b.UserName); Console.WriteLine("b.Age:"+b.Age);

输出结果:

结论:问题集中在b=a这句话上。这时b指向的是a的一份copy,指向全局堆栈上的与a不同的地址。所以b和a是没有任何关系的,b不随a的改变而改变。


2) 集合

1.集合中一笔数据的增删修改。

Lista=newList(); Listb=a; a.Add(newUserInfo(){UserName="Baobao",Age=27}); Console.WriteLine("b.Countafteradding:"+b.Count); Console.WriteLine(); Console.WriteLine("Aftermodifyinga[0]"); a[0].UserName="AndersLiu"; a[0].Age=30; Console.WriteLine("b[0].UserName:"+b[0].UserName); Console.WriteLine("b[0].Age:"+b[0].Age); Console.WriteLine(); a.Remove(a[0]); Console.WriteLine("b.Countafterdeleting:"+b.Count);

输出结果:

结论:b随着a中数据增减修改而变化。因为b和a指向托管堆上同一个List实例的内存地址,这和复合类型是一样的。

数组就不说了,可以看作是多个变量的集合,所以按照集合来处理。

到此,关于"C#中b=a的多种情况及结果分析"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

类型 结果 地址 实例 指向 情况 输出 结论 多种 C# 分析 成员 学习 托管 两个 全局 变量 堆栈 数据 更多 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网的科技 嘟嘟瓜互联网科技 猫创互联网科技 互联网科技汛 互联网和高科技公司 互联网实体化科技化 玖二柒互联网科技公司待遇 恒银科技与互联网金融 中国航天科技大学国际工业互联网 坤平互联网科技 链环科技传统企业怎么转型互联网 天津腾达互联网科技有限公司 保险科技服务互联网营销体系 无锡工业互联网科技有限公司 中国互联网有什么科技 半导体是互联网高科技吗 福建互联网展示科技馆设计 科技互联网经济论坛 互联网科技对化妆品行业 株洲百竞科技的互联网营销顾问 广州万易互联网科技有限公司 青岛互联网科技公司 腾讯科技 互联网女皇 太原新华互联网科技学校怎么样 科技与互联网的利与弊 承德科技产业互联网发展 高科技互联网发展前景如何 上海科技产业互联网平台 云南省自由互联网科技有限公司 科技互联网企业在行动
0