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,结构体不适合作为模型使用,比较适合作为小数据的容器使用
标签:Name,C#,CE,学习,se,public,SE,结构 From: https://www.cnblogs.com/luludongxu/p/17346170.html