C# 结构体学习研究
internal class TestStruct { /// <summary> /// 结构体 /// </summary> struct StructEntity { public int ID { get; set; } public string Name { get; set; } } /// <summary> /// 类 /// </summary> class ClassEntity { /// <summary> /// 结构体作为类的成员会分配在类的堆中 /// </summary> public StructEntity SE; public void ChangeSE() { SE.Name = "张九"; } /// <summary> /// 通过返回值返回结构体 /// </summary> /// <returns></returns> public StructEntity GetSE() { return SE; } } readonly ClassEntity CE = new ClassEntity(); public void Test() { CE.SE = new StructEntity { //给结构赋值 ID = 1, Name = "张三" }; var se = CE.SE; //测试=赋值 se.Name = "李四"; Output(se); Test2(CE.SE); //测试参数传递 var se1 = CE.GetSE(); //测试返回值 se1.Name = "赵六"; Output(se1); CE.ChangeSE(); //测试修改原数值 Output(se1); } void Output(StructEntity se) { //传入的se也是个新的结构体 Console.WriteLine(se.Name + " | 原始值:" + CE.SE.Name); } void Test2(StructEntity se) { se.Name = "王五"; Output(se); } }
运行结果:
总结(只是个人的理解,可能有不正确的地方,如果有错误望指出):
1,结构体是值类型,每次赋值和传递都会创建一个新的结构体,修改新的结构体不会影响原数值,因此其具有不变性,感觉比较适合作为缓存的容器使用
2,使用结构体的时候可以将其理解成大号的int,因为int就是结构体
3,当结构体在方法中会存储在堆栈中,当作为引用类型的成员时会存在在该成员所在的堆中?(存疑)
4,当我们描述一个轻量级对象的时候,结构体可提高效率,成本更低,因此在存储大量小数据时可以使用结构体
5,结构体不能太大,因为结构体每次都要创建新的数据,太大的话得不偿失,反而用class更合适,因为class只传递一个引用,当类型定义大于16字节时不要选用struct
6,结构体作为参数传递和返回值时会创建新的,因此不要层层传递或返回结构体,复杂的结构体最好作为类的成员传递,尽量避免直接传递结构体本体
7,结构体不适合作为模型使用,比较适合作为小数据的容器使用
标签:
C#学习笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~