首页 > 其他分享 >类与结构体的区别

类与结构体的区别

时间:2024-06-21 11:42:49浏览次数:22  
标签:存储 区别 继承 类型 结构 public 构造函数

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

相关文章

  • uniswap、pancakeswap、shadowswap、有什么区别
    Uniswap、PancakeSwap和ShadowSwap是三个不同的去中心化交易所(DecentralizedExchanges,简称DEXs),它们在各自的区块链生态系统中运作,并且有各自的特点和优势。下面是它们之间的一些主要区别:Uniswap平台:Uniswap是在以太坊区块链上运行的最著名的去中心化交易所之一。机制:它......
  • count(1)与count(*)区别
    count(1)和count(*)都是用来计算数据库表中行数的函数,但它们有一些微小的区别。count(1):这个函数会计算指定列(在这里是1)中非空值的数量。在实际应用中,通常使用count(1)来计算行数,因为它更简洁,而且不需要关心具体的列名。count(*):这个函数会计算表中所有行的数量,包括含有NU......
  • STM32同步通信与异步通信的区别及特点
    1.同步通信同步通信是指通信双方在通信过程中需要使用同步信号进行同步,以确保数据的正确传输。STM32的同步通信主要有两种方式:SPI和I2C。-SPI(SerialPeripheralInterface):SPI是一种高速的同步串行通信协议,它可以实现STM32与外设之间的高速数据传输。SPI通信需要使用4根线:时钟......
  • Python 学习 第四册 第8章 结构化的文本文件
    ----用教授的方式学习。目录8.1结构化的文本文件8.1.1CSV8.1.2 XML8.1.3 JSON8.1.4 YAML8.1结构化的文本文件结构化的文本有很多格式,区别它们的方法如下所示。• 分隔符,比如 tab('\t')、逗号(',')或者竖线('|')。逗号分隔值(CSV)就是这样的例子。• '<' 和 '>' ......
  • 【C++高阶】探索STL的瑰宝 map与set:高效数据结构的奥秘与技巧
    ......
  • session、cookies、tonken以及JWT的定义以及区别
    session概述Session用于记录用户的状态。Session指的是一段时间内,单个客户端与Web服务器的一连串相关的交互过程。在一个Session中,客户可能会多次请求访问同一个资源,也有可能请求访问各种不同的服务器资源。Session是由服务器端创建的原理Session会为每一次会话分配一个S......
  • dockerfile 指令 ADD 和 COPY 的区别
     Dockerfile中的ADD和COPY指令都用于将文件或目录从构建上下文复制到Docker镜像中,但它们之间存在一些关键差异: 基本复制功能:COPY:纯粹地将从构建上下文(即执行dockerbuild命令时指定的目录及其子目录)中的文件或目录复制到镜像中指定的路径。ADD:除了具......
  • HCIA 15 AC+FIT AP结构WLAN基础网络
    本例配置AC+FIT,即瘦AP+AC组网。生活中家庭上网路由器是胖AP,相当于AC+FIT二合一集成到一个设备上。1.实验介绍及拓扑某企业网络需要用户通过WLAN接入网络,以满足移动办公的最基本需求。1.AC采用旁挂核心组网方式,AC与AP处于同一个二层网络。2.AC作为DHCP服务器给AP......
  • 多处理系统结构
    目录统一内存访问(UMA)多处理器系统结构优点缺点应用场景UMA结构的架构示例解决方案和改进非统一内存访问(NUMA)多处理系统结构概述NUMA的优点NUMA的缺点NUMA系统的工作原理NUMA优化策略结论        现代计算机系统越来越多地采用多处理器结构,这带来了性......
  • 在Java中public class与class的区别(详细解释)
    在Java中,class 关键字用于定义一个类。当你使用 class关键字定义一个类时,它可以是公开的(即可以从其他包中访问)或包私有的(即只能在定义它的包内部访问)。在编写程序时,为了明确指定一个类为公开的,我们可以使用public 关键字来修饰 class。下面是publicclass 和 class(没有......