码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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 等
    • 类似分部类,可以声明分部结构。
  • 相关阅读:
    内网横向知识
    5个基于.Net Core值得推荐的CMS开源项目
    CSS 媒体查询 @media【详解】
    SpringBoot - Failed to determine a suitable driver class
    VSCode Python运行环境配置
    Nginx配置开启HTTPS
    获取店铺所有商品API 返回值说明
    08 nginx 的一次请求处理调试
    MySQL–innodb存储学习之锁
    LeetCode每日一题(587. Erect the Fence)
  • 原文地址:https://blog.csdn.net/zheliku/article/details/134092189
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号