结构与类的对象在引用上的不同之处
最近程序编写用到了存入model实体对象值到list中,如下所示:
1 foreach (var i in tasks) 2 {
3 task1 taskinfo=new task1();4 taskinfo.ID = i.ID.ToString(); 5 taskinfo.TASK_TITLE = i.TASK_TITLE; 6 taskinfo.T_AREAINFO_ID = i.T_AREAINFO_ID.ToString(); 7 taskList.Add(taskinfo); 8 }
上述taskList为task对象的list数组,taskinfo为task对象实例,task为结构体model。若task为类,那么taskList到最后都会是一样的值,即最后一次taskinfo的值。若为结构体,则taskList每次存入的值都不同。
用到List<T>,T为结构时,new 对象,对象每次生成值存入list中,list存入每次生成的值;T为类时,new 对象,对象每次生成值存入list中,list存入的都会变成最近一次生成的值。
也就是说:结构与类,new一个对象时,结构每次引用对象都会生成不同的值,但类的对象每次生成的值都会把前面的值覆盖。
原因:结构对象每次生成的值都会开辟新的内存空间,来存放每次的值,而类对象每次生成的值
都会只在原来new生成的对象内存空间中,内存固定,所以会把原来的值覆盖掉。
即如下面所说:
类:
类是引用类型在堆上分配,类的实例进行赋值只是复制了引用,都指向同一段实际对象分配的内存
类有构造和析构函数
类可以继承和被继承
结构:
结构是值类型在栈上分配(虽然栈的访问速度比较堆要快,但栈的资源有限放),结构的赋值将分配产生一个新的对象。
结构没有构造函数,但可以添加。结构没有析构函数
结构不可以继承自另一个结构或被继承,但和类一样可以继承自接口