• 结构与类的对象在引用上的不同之处


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

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

    类有构造和析构函数

    类可以继承和被继承

    结构:

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

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

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

  • 相关阅读:
    Fast Member
    C++箴言:理解typename的两个含义
    网上资源工具
    WeakReference
    MonoGame教程
    The RAII Programming Idiom
    OpenGL Common Mistakes
    Finalize()、Dispose()、SafeHandle、GC
    Interop with Native Libraries
    C++计算几何库
  • 原文地址:https://www.cnblogs.com/lxxhome/p/5779134.html
Copyright © 2020-2023  润新知