zoukankan      html  css  js  c++  java
  • 结构与类的对象在引用上的不同之处

    最近程序编写用到了存入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生成的对象内存空间中,内存固定,所以会把原来的值覆盖掉。
    即如下面所说:
    类:

    类是引用类型在堆上分配,类的实例进行赋值只是复制了引用,都指向同一段实际对象分配的内存

    类有构造和析构函数

    类可以继承和被继承

    结构:

    结构是值类型在栈上分配(虽然栈的访问速度比较堆要快,但栈的资源有限放),结构的赋值将分配产生一个新的对象。

    结构没有构造函数,但可以添加。结构没有析构函数

    结构不可以继承自另一个结构或被继承,但和类一样可以继承自接口

  • 相关阅读:
    『Python基础』第3节:变量和基础数据类型
    Python全栈之路(目录)
    前端
    Python十讲
    Ashampoo Driver Updater
    druid 连接池的配置
    webService 入门级
    pom
    pom----Maven内置属性及使用
    webservice 总结
  • 原文地址:https://www.cnblogs.com/lxxhome/p/5779134.html
Copyright © 2011-2022 走看看