当前位置: 首页 > article >正文

C# 图解教程 第5版 —— 第11章 结构

文章目录

    • 11.1 什么是结构
    • 11.2 结构是值类型
    • 11.3 对结构赋值
    • 11.4 构造函数和析构函数
      • 11.4.1 实例构造函数
      • 11.4.2 静态构造函数
      • 11.4.3 构造函数和析构函数小结
    • 11.5 属性和字段初始化语句
    • 11.6 结构是密封的
    • 11.7 装箱和拆箱(*)
    • 11.8 结构作为返回值和参数
    • 11.9 关于结构的更多内容

11.1 什么是结构

  • 类是引用类型,结构是值类型。
  • 结构是 隐式密封 的,不能派生。

11.2 结构是值类型

  • 结构类型的变量不能为 null。
  • 两个结构变量不能引用同一对象。
image-20231028151411869
图11.1 类与结构的内存安排

11.3 对结构赋值

​ 对结构赋值,就是复制结构的值。

image-20231028151559209
图11.2 类和结构的变量赋值

11.4 构造函数和析构函数

​ 结构可以有实例构造函数和静态构造函数,但没有析构函数。

11.4.1 实例构造函数

  • 每个结构都存在预定义的无参构造函数。在 C# 10 之前,不能删除或重定义。
  • 在 C# 11 之前,结构类型的构造函数必须初始化该类型的所有实例字段。
  • 可以创建其他的有参构造函数。
  • 仍需要使用 new 调用构造函数。
  • 可以不使用 new 创建结构实例,但是有如下限制:
    • 在设置数据成员的值后才能使用该成员。
    • 对所有数据成员赋值后才能调用函数成员。
image-20231028152004769
图11.3 不使用 new 创建结构实例的限制

11.4.2 静态构造函数

​ 结构的静态构造函数与类的静态构造函数类似。

11.4.3 构造函数和析构函数小结

表11.1 构造函数和析构函数的总结
image-20231028152414798

11.5 属性和字段初始化语句

  • 在 C# 10 之前,不允许使用实例属性和字段初始化语句。
  • 静态属性和静态字段可以进行初始化。
image-20231028153721720
图11.4 C# 10 之前不允许使用实例属性和字段初始化语句

11.6 结构是密封的

​ 由于结构不支持继承,因此下面的修饰符不能用于结构:

  • protected
  • protected internal
  • abstract
  • sealed
  • virtual

​ 由于结构本身派生自 System.ValueType(System.ValueType 派生自 object),因此可以使用 new 和 override 去覆盖或重定向 System.ValueType 中同名的成员。

11.7 装箱和拆箱(*)

11.8 结构作为返回值和参数

  • 将结构作为返回值或值参数时,均会创建副本。
  • 使用 ref 或 out 参数时,将会传递结构的引用以修改其内容。

11.9 关于结构的更多内容

  • 对结构进行分配的开销比类小,可以提高性能。
    • 注意装箱和拆箱的高昂代价。
  • 预定义简单类型尽管被视为原始类型,但在 .NET 中实现为结构。
    • int、short、long 等
  • 类似分部类,可以声明分部结构。

http://www.kler.cn/a/107584.html

相关文章:

  • Java面向对象编程进阶之包装类
  • 「Py」Python基础篇 之 Python都可以做哪些自动化?
  • 用vscode编写verilog时,如何有信号定义提示、信号定义跳转(go to definition)、模块跳转这些功能
  • 以色列支付龙头遭DDoS攻击,各地超市加油站等POS机瘫痪
  • Kubernetes在容器编排中的应用
  • Redis主从复制(replication)
  • Vue3问题:如何实现密码加密登录?前后端!
  • 查询和下载国自然科学基金
  • 算法——贪心算法
  • 适用于嵌入式arm的ffmpeg编解码
  • RedissonCach的源码流程
  • 视频转换器WinX HD Video Converter mac中文特点介绍
  • 在el-dialog中使用tinymce 点击工具栏下拉框被遮挡
  • 分享三个国内可用的免费GPT-AI网站
  • 学习笔记:Splay
  • RTOS编程中的原子操作
  • docker 常用指令
  • SpringAOP源码解析之advice执行顺序(三)
  • phar反序列化
  • ESP8266,手机与电脑之间的TCP通讯
  • 分享一个基于asp.net的供销社农产品商品销售系统的设计与实现(源码调试 lw开题报告ppt)
  • 客户端负载均衡策略:loadBalancer,ribbon
  • HDR图像处理软件 Photomatix Pro mac中文版新增功能
  • 解决Linux下编译Intel oneTBB动态库出错的问题
  • 【电路笔记】-交流电路中的功率
  • 统计学习方法 支持向量机(下)