原文链接: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。
密封性:类可以被继承,可以为抽象类,可以被密封。结构体不能被继承,不能为抽象,但可以被密封。
构造函数:结构体可以有实例构造函数和静态构造函数,类只能有实例构造函数。
析构函数:结构体没有析构函数,类有。
装箱和拆箱:结构体进行装箱操作时会影响性能,因为它会导致数据在托管堆上的复制。
举例:
// 类的定义 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; } }
// 创建类的实例 MyClass myClassInstance = new MyClass(10); // 创建结构体的实例 MyStruct myStructInstance = new MyStruct(10);
标签:存储,区别,继承,类型,结构,public,构造函数 From: https://www.cnblogs.com/Dongmy/p/18260222