类与结构体的区别

原文链接: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);

  

posted @ 2024-06-21 11:37  yinghualeihenmei  阅读(19)  评论(0编辑  收藏  举报