C产品如何满足特定用户需求?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1048个文字,预计阅读时间需要5分钟。
选择`struct`还是`class`取决于具体的语言语义和需求:
赋值和传参时行为完全不同
这是最常踩坑的点——你以为在改副本,其实改了原对象,或者反过来。
-
struct赋值(s2 = s1)或作为方法参数传入时,会完整复制所有字段。修改s2.X不会影响s1.X -
class赋值(c2 = c1)只是复制引用地址。修改c2.X会同步反映到c1.X - 即使方法参数声明为
ref或in,struct仍可能因装箱(比如转object或接口)意外触发堆分配,带来 GC 压力和性能抖动
构造函数和字段初始化限制很硬
struct 的构造逻辑受编译器强约束,稍不注意就编译失败。
本文共计1048个文字,预计阅读时间需要5分钟。
选择`struct`还是`class`取决于具体的语言语义和需求:
赋值和传参时行为完全不同
这是最常踩坑的点——你以为在改副本,其实改了原对象,或者反过来。
-
struct赋值(s2 = s1)或作为方法参数传入时,会完整复制所有字段。修改s2.X不会影响s1.X -
class赋值(c2 = c1)只是复制引用地址。修改c2.X会同步反映到c1.X - 即使方法参数声明为
ref或in,struct仍可能因装箱(比如转object或接口)意外触发堆分配,带来 GC 压力和性能抖动
构造函数和字段初始化限制很硬
struct 的构造逻辑受编译器强约束,稍不注意就编译失败。

