类与结构体的区别
原文链接:https://www.cnblogs.com/lcxBlog/p/4903070.html
https://blog.csdn.net/weixin_43831728/article/details/105916518
区别:
1.类型不同
结构是一种值类型,而类是引用类型。
值类型用于存储数据的值,引用类型用于存储对实际数据的引用。那么结构体就是当成值来使用的,类则通过引用来对实际数据操作
2、存储不同
结构使用栈存储,而类使用堆存储。
栈的空间相对较小.但是存储在栈中的数据访问效率相对较高,栈由系统自动分配,速度较快。但程序员是无法控制的
堆的空间相对较大.但是存储在堆中的数据的访问效率相对较低,堆是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便.
堆栈的执行效率要比堆的执行效率高,可是堆栈的资源有限,不适合处理大的逻辑复杂的对象。所以结构处理作为基类型对待的小对象,而类处理某个商业逻辑
3、作用不同
类是反映现实事物的一种抽象
结构体的作用只是一种包含了具体不同类别数据的一种包装
类可以继承,结构体不具备类的继承多态特性
4、初始化不同
类可以在声明的时候初始化
结构不能在声明的时候初始化(不能在结构中初始化字段),否则报错。
5、类的实质
类的实质是一种数据类型,类似于int、char等基本类型,不同的是它是一种复杂的数据类型。因为它的本质是类型,而不是数据,所以不存在于内存中,不能被直接操作,只有被实例化为对象时,才会变得可操作
6、构造函数
不能为结构体提供无参构造函数(类中如果提供了自定义构造函数,就不会再提供默认无参构造函数。)
7、默认访问权限
结构体的成员默认private,类的成员默认public
8、结构体和类的使用场景
因为结构体是值类型,自身存储在栈上,主要用于轻量级对象,用来存储简单的数据(此时结构体的成员也大部分是值类型)。
因为类是引用类型,可以抽象、继承等,适合存储重量级对象,拥有复杂逻辑(结构体不能被继承,也不能继承自其他,不能用abstract关键字等)
在表现抽象和多级别的对象层次时,类是最好的选择
大多数情况下该类型只是一些数据时,结构时最佳的选择
在C#中,类(Class)和结构体(Struct)是创建用户定义类型的主要方式。它们之间的主要区别如下:
内存分配位置:类是引用类型,它的变量只包含引用(指针),而该引用指向内存堆上的实例;结构体是值类型,它的变量直接包含其数据,所以它在声明时分配内存。
默认的构造函数:类有默认的无参构造函数,结构体没有默认的无参构造函数,必须定义。
继承:类是可以继承其他类的,而结构体不能。结构体隐式地继承System.ValueType。
密封性:类可以被继承,可以为抽象类,可以被密封。结构体不能被继承,不能为抽象,但可以被密封。
构造函数:结构体可以有实例构造函数和静态构造函数,类只能有实例构造函数。
析构函数:结构体没有析构函数,类有。
装箱和拆箱:结构体进行装箱操作时会影响性能,因为它会导致数据在托管堆上的复制。
举例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | // 类的定义 public class MyClass { public int X { get ; set ; } public MyClass( int x) { X = x; } } // 结构体的定义 public struct MyStruct { public int X { get ; private set ; } public MyStruct( int x) { X = x; } } |
1 2 3 4 5 | // 创建类的实例 MyClass myClassInstance = new MyClass(10); // 创建结构体的实例 MyStruct myStructInstance = new MyStruct(10); |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2022-06-21 Global.asax文件