C#结构体struct和类class的区别与使用场景

2023-10-27

目录

前言

一、结构体的使用

二、结构与类的区别

1.类和结构有以下几个基本的不同点:

2.选择使用情况

总结


前言

在我们开发程序中,功能实现可能没有问题,问题是如何将代码变得更优雅,优化程序运行。本文主要区别结构体与类的区别以及什么情况下使用结构体或类更为适合。

一、结构体的使用

在c#中,我们可以使用struct关键字来声明一个结构体,如:

struct book
{
     private int id;
     public String name;
     private String site;
     public void setValue(int id,String name,String site)
     {
         id = id;
         name = name;
         site = site;
     }
}

上面我们声明了一个名为books的结构体,在结构体中,可带有方法、字段、索引、属性、运算符方法和事件。

使用

   public static void Main(string[] args)
   {
      new book().setValue(1, "cs", "cs"); 
      book b;//声明
    b.name = "11111";
    Console.WriteLine(b.name);
   }

二、结构与类的区别

1.类和结构有以下几个基本的不同点:

  1. 类是引用类型,结构是值类型。

  2. 结构不支持继承。

  3. 结构不能声明默认的构造函数。

  4. 结构体中声明的字段无法赋予初值,类可以

  5. 类的对象是存储在堆空间中,结构存储在栈中。

2.选择使用情况

堆空间大,但访问速度较慢,栈空间小,访问速度相对更快。当我们描述一个轻量级对象的时候,结构可提高效率,成本更低。不过假如我们在传值的时候希望传递的是对象的引用地址而不是对象的拷贝,就应该使用类了。


总结

结构是值类型,它在栈中分配空间;而类是引用类型,它在堆中分配空间,栈中保存的只是引用。

所以比较小的数据时可以使用结构体来提升读取速度。而使用场景需要用到引用地址时就使用类。

以上就是如何声明结构体使用,以及什么情况下使用结构体和类的全部内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#结构体struct和类class的区别与使用场景 的相关文章

  • 使用 CLion 进行 OpenCV Windows 设置

    我想在 Windows 上为 CLion IDE 设置 OpenCV 我尝试使用 OpenCV 3 1 和 2 4 得到相同的结果 我有 Windows 10 64 位 CLion 使用 cygwin 环境 到目前为止我做了什么 1 从Op
  • 多个源的 makefile

    在学习 make 文件时 我试图为多个源目录编写一个 make 文件 似乎我在某个地方错了 这是我的代码结构 directory common fun2 c inc fun h src fun1 c main c 这是我的生成文件 CC c
  • 添加 Nullable int 时保持 null?

    我想添加可为空的int 并保留null当所有值都是null 我想要这个结果 1 2 3 1 null 1 null null null O null 0 问题是 如果我将一个值与 null 相加 结果为 null int i1 1 int
  • CMake 找不到请求的 Boost 库

    既然我已经浏览了其他人的解决方案几个小时 但找不到适合我的问题的正确答案 我想将我的具体问题带给您 我正在尝试使用 CMake 构建 vsomeip 为此 我之前构建了 boost 1 55 但是 我在 CMake 中收到以下错误 The
  • json.net自定义jobject反序列化

    我正在尝试使用 JsonConvert DeserializeObject string 将字符串反序列化为可与动态一起使用的 jobject 来动态访问 json 文档 但是我想避免知道文档的大小写 以便我可以输入 dynamic doc
  • 将 new 与 decltype 一起使用

    T t T is an implementation detail t new T want to avoid naming T to allow for flexibility t new decltype t error cannot
  • Poco c++Net:Http 从响应中获取标头

    我使用 POCO C Net 库进行 http 我想尝试制定持久缓存策略 首先 我认为我需要从缓存标头中获取过期时间 并与缓存值进行交叉检查 如果我错了 请告诉我 那么我如何从中提取缓存头httpResponse 我已经看到你可以用 Jav
  • 删除是如何工作的? [复制]

    这个问题在这里已经有答案了 可能的重复 C 编程 free 如何知道要释放多少 https stackoverflow com questions 1518711 c programming how does free know how m
  • linq 中使用字符串数组 c# 的 'orderby'

    假设我有一个这样的方法定义 public CustomerOrderData GetCustomerOrderData string CustomerIDs var query from a in db Customer join b in
  • 从模板切换传递的类型

    在 C 中是否可以检查传递给模板函数的类型 例如 template
  • 将表(行)与 OpenXML SDK 2.5 保持在一起

    我想在 Word 文档中生成多个表 每行 2 行 但我想将这两行保留在一起 如果可能的话 new KeepNext 第一行不起作用 new KeepNext 第一行的最后一段不起作用 new CantSplit 放在桌子上不起作用 在所有情
  • 使用 C# 和 wpf 创建类似 Dock 的应用程序

    我需要创建一个与我们购买笔记本电脑时获得的应用程序类似的应用程序 仅当鼠标指针到达窗口顶部时它才可见 那么我怎样才能使用 C 4 0 来做到这一点呢 http www notebookcheck net uploads pics win2
  • 搜索实体的所有字段

    我正在尝试在客户数据库上实现 多功能框 类型的搜索 其中单个查询应尝试匹配客户的任何属性 这是一些示例数据来说明我想要实现的目标 FirstName LastName PhoneNumber ZipCode Mary Jane 12345
  • 使用具有抗锯齿功能的 C# 更改抗锯齿图像的背景颜色

    我有一个图像需要更改背景颜色 例如 将下面示例图像的背景更改为蓝色 然而 图像是抗锯齿的 所以我不能简单地用不同的颜色替换背景颜色 我尝试过的一种方法是创建第二个图像 仅作为背景 并更改其颜色并将两个图像合并为一个图像 但是这不起作用 因为
  • 英文日期差异

    接近重复 如何计算相对时间 https stackoverflow com questions 11 how do i calculate relative time 如何在 C 中计算某人的年龄 https stackoverflow c
  • Linux mremap 不释放旧映射?

    我需要一种方法将页面从一个虚拟地址范围复制到另一个虚拟地址范围 而无需实际复制数据 范围很大 延迟很重要 mremap 可以做到这一点 但问题是它也会删除旧的映射 由于我需要在多线程环境中执行此操作 因此我需要旧映射能够同时使用 因此稍后当
  • 需要提取字符串中点后的最后一个数字,如“7.8.9.1.5.1.100”

    我需要提取 C 字符串中最后一个点后面的最后一个数字 例如 7 8 9 1 5 1 100 并将其存储在整数中 Added 该字符串也可以是 7 8 9 1 5 1 1 或 7 8 9 1 5 1 0 我还想验证它在最后一个点之前恰好是 7
  • 来自 3rd 方库的链接器错误 LNK2019

    我正在将旧的 vc 6 0 应用程序移植到 vs2005 我收到以下链接器错误 我花了几天时间试图找到解决方案 错误LNK2019 无法解析的外部符号 imp 创建AwnService 52 在函数 public int thiscall
  • DataContractSerializer 事件/委托字段问题

    在我的 WPF 应用程序中 我正在使用DataContractSerializer序列化对象 我发现它无法序列化具有事件或委托声明的类型 考虑以下失败的代码 Serializable public abstract class BaseCl
  • 使用未分配的局部变量

    我遇到了一个错误 尽管声明了变量 failturetext 和 userName 错误仍然出现 谁能帮帮我吗 Use of Unassigned local variable FailureText Use of Unassigned lo

随机推荐

  • Linux脏牛漏洞提权

    通过vulnhub平台搭建靶场 靶机地址 Vulnerable By Design Search lampiao VulnHub 靶机下载地址 https download vulnhub com lampiao Lampiao zip 下
  • PCL 点到面的ICP精配准(线性最小二乘优化)

    目录 一 算法原理 1 算法概述 2 线性优化 3 参考文献 二 代码实现 三 结果展示 博客长期更新 本文最近一次更新时间为 2023年6月13日 完善了算法理论介绍部分的计算公式 一 算法原理 1 算法概述 点到平面度量通常使用标准非线
  • 多模态融合2022

    论文题目 TransFusion Robust LiDAR Camera Fusion for 3D Object Detection with Transformers 会议 CVPR2022 单位 香港科技大学 华为 1 摘要 intr
  • Linux:进程地址空间管理(图文详解总结)

    首先我们要明白一个概念 什么是地址 地址是指向内存区域的一个编号 每一个进程都有4G的进程地址空间 那么系统到底是如何给进程分配内存的呢 结论 分页管理 虚拟地址空间 看图进一步理解 如上图是系统给进程分配内存的逻辑图 操作系统用一个进程控
  • 动态规划(DP)

    DP的核心就是发现一个最优结构使得当前的结果可以用之前计算过的结果表示 至于怎样找到这个结构 呵呵 你猜 DP是把计算的中间过程存储下来防止下一次计算时候重复计算是一种以空间换时间的做法 DP的思想 动态规划 更像是走一步规划一步 只要把问
  • vscode解决cuda头文件与普通c++头文件不能同时跳转的问题

    1 语言设置为cuda cpp 2 configuration Provide取消关联cmake文件
  • PyTorch深度学习实战(5)——计算机视觉基础

    PyTorch深度学习实战 5 计算机视觉基础 0 前言 1 图像表示 2 将图像转换为结构化数组 2 1 灰度图像表示 2 2 彩色图像表示 3 利用神经网络进行图像分析的优势 小结 系列链接 0 前言 计算机视觉是指通过计算机系统对图像
  • 【STM32】FSMC—扩展外部 SRAM 初步使用 1

    基于野火指南者 零死角玩转 STM32F103 指南者 的学习 STM32F103系列 FSMC Flexible Static Memory Controller简介 1 详细功能参看 STM32F10x参考手册 这边是概述 是一个外设
  • 空格隔开的字符串截取(实例)

    题目 Leetcode1816 截断句子 问题 第一个方法 第二个方法 问题 句子 是一个单词列表 列表中的单词之间用单个空格隔开 且不存在前导或尾随空格 每个单词仅由大小写英文字母组成 不含标点符号 例如 Hello World HELL
  • Spring系列(五):@Lazy懒加载注解用法介绍

    目录 1 Lazy 懒加载注解的概念 2 Lazy 懒加载注解作用 3 Lazy 懒加载注解使用示例 3 1 新建配置类TestLazyConfig java 3 2 新建测试类 TestLazy java 今天给大家介绍 Lazy懒加载注
  • Elasticsearch:替换、更新和删除性能分析

    替换 更新和删除 在使用ES的时候 如果你认真观察了 你会发现 替换 更新和更新都是有蛮大的区别的 虽然说结果是一样的 但是原理还是不同的 这一点一定要明确 一 看一下替换 这个时候替换成功 这个Version是3 再替换一下 这个时候Ve
  • Android音视频 - OpenGL GLSL基础

    上节在绘制三角形的时候 简单讲解了一些着色器 GLSL 的相关概念 可能看的云里雾里的 不要担心 在本节中 我将详细讲解着色语言 GL Shader Language GLSL 的一些基本的概念 PS 无特殊说明 文中的 GLSL 均指 O
  • idea使用笔记

    1 idea service springboot 启动类显示隐藏 隐藏 显示 2 idea导入项目后没有被识别为maven项目的解决办法 如果不行参考 https blog csdn net kt1776133839 article de
  • dart 练习模板自用

    import package flutter material dart main gt runApp const MyApp class MyApp extends StatelessWidget const MyApp super ke
  • QT笔记-QString-string相互转换

    新建头文件 命名为GBK h 内容如下 include
  • linux清空文件内容的三种方法

    1 使用vi vim命令打开文件后 输入 d 清空 后保存即可 但当文件内容较大时 处理较慢 命令如下 vim file name d wq 2 使用cat命令情况 命令如下 推荐 cat dev null gt file name 3 使
  • 【Mysql】取两个查询语句结果的交集

    表结构 订单表 order info id order no price quality 1 PO1001 100 0 10 2 PO1002 200 0 20 3 PO1003 100 0 10 订单扩展表 order ext id or
  • NERFS 与现实捕捉 - 弥合现实世界与数字世界之间的差距

    NERF介绍 近年来 计算机视觉和图形领域取得了显着的进步 催生了革命性的技术 改变了各个行业 NERFS 神经辐射场 和现实捕捉是两项备受关注的重要技术 NERFS 和现实捕捉都是以数字形式捕捉和重建现实世界的强大工具 然而 它们在方法和
  • 考研数二第二讲 数列/函数的极限

    一 数列 无穷多个数按照一定顺序排成一列叫数列 如 二 数列的极限 回到刚才提到的四个数列 我们根据描述性定义 当 n 无限增大时 即 n 可以轻松推出数列 xn 的极限值 实际上我们对描述性定义不算满意 因为它描述说 当 n 无限增大时
  • C#结构体struct和类class的区别与使用场景

    目录 前言 一 结构体的使用 二 结构与类的区别 1 类和结构有以下几个基本的不同点 2 选择使用情况 总结 前言 在我们开发程序中 功能实现可能没有问题 问题是如何将代码变得更优雅 优化程序运行 本文主要区别结构体与类的区别以及什么情况下