C语言的structure和类的区别是:1、声明时的关键字不同,结构是 struct ,而类是 class2、结构是值类型,存储在栈中,类是引用类型,存储在托管堆中,结构在声明的时候就已经为其分配栈上的内存了,而类需要用new为其分配堆上的内存。
![](https://cdn-docs.pingcode.com/wp-content/uploads/2023/02/添加标题-15-17.png?x-oss-process=image/auto-orient,1/format,webp)
一、C语言的structure和类的区别
1、声明时的关键字不同,结构是 struct ,而类是 class
2、结构是值类型,存储在栈中,类是引用类型,存储在托管堆中,结构在声明的时候就已经为其分配栈上的内存了,而类需要用new为其分配堆上的内存。
3、结构是隐式密封的,不能使用 sealed (只能在当前项目中访问,不能继承只能实例化) 和 abstract (只能在当前项目中访问,不能实例化只能继承) 修饰符,结构体不能被继承,所以在调用结构方法时不需要查找 vtable 虚函数继承表,类可以被继承。
4、结构中的实例字段只能声明不能赋值,而类没有限制。结构只声明没有用 new 进行初始化时,可以给它的实例字段直接赋值,而类不行。
5、结构没有析构函数,结构中的方法不能用 virtual 和 abstract 修饰符,但是可以用 override 修饰,用来重写父类的方法。
6、结构不能显示给出默认构造函数(无参构造函数),无论有没有自定义构造,默认构造都隐式存在,而类中有自定义的构造函数时,默认构造会被隐藏,想要调用默认构造,必须显示给出默认构造。
7、结构可以使用属性,但是属性和构造函数不能同时存在。
8、结构的自定义构造函数必须初始化所有的实例字段和没有初始化的非静态属性,类没有限制。
延伸阅读:
二、结构的使用场景
1、结构是值类型在栈中,栈的存取速度比堆快,但是容量小,适合轻量级的对象,比如点、矩形、颜色;
2、如果需要描述少量字段,不需要继承,就用结构;
3、在变量传值的时候,希望传递对象的是拷贝,而不是对象的引用地址,这个时候就可以使用结构。
![](https://cdn-docs.pingcode.com/wp-content/uploads/2024/05/pingcode-product-manager.png)