Unity - A计划(一年有效期) 扫二维码继续学习 二维码时效为半小时

(61评价)
价格: 2208.00元
含有引用类型的结构体赋值应该不都是按值赋值,而是值类型按值赋值,引用类型还是调用其类型重载的赋值运算符进行赋值的吧?
kicker发起了问答2019-05-23
2
回复
452
浏览

C#中级编程网盘 视频226练习题20-23一节中第22题

视频中说C#中结构体赋值是按值赋值的,但结构体 Student 中包含String 类型变量name,那String本身是引用类型,如果说按值赋值好像不对吧?

我觉得应该是复制结构体的过程是:结构体中属于栈上的部分(值类型和引用(String地址))复制一份在粘上,属于堆上的部分(String实际内存部分)复制一份在堆上,然后把栈上新复制的引用变量(新String地址)指向对应的新复制的堆上的内存(新的String实际内存部分)。具体编译器怎么识别应该是按赋值操作符左右类型来调用对应重载的方法的吧?

所有回复
  • 老师_Trigger 2019-05-23

    同学你好,可以参考一下:

    https://blog.csdn.net/A13155283231/article/details/85199844

    https://www.cnblogs.com/woaixiaozhi/p/5116137.html

    https://www.cnblogs.com/wzzkaifa/p/7400382.html

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • kicker 2019-05-24

    谢谢给的链接,头一个说的和我的意思一样,其实结构体并不是说一定是全部存储在栈上,而是说结构体是独立分配整块内存块,成员变量是值类型就在栈上存储,是引用类型就和引用类型分配内存一样,在栈和堆上同时存储引用类型变量的相关信息;结构体内引用类型成员赋值语法不再是普通引用类型的复制地址使指向同一块堆内存,而是各个引用变量管自己的赋值过程,相当于类的深拷贝,我画了一个包含引用类型的结构体分配内存和赋值的流程示意图和普通引用类型的赋值示意图,请帮我看下对不对?

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
发表回复
你还没有登录,请先 登录或 注册!