码农知识堂 - 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 等
    • 类似分部类,可以声明分部结构。
  • 相关阅读:
    python学习-网络UDP 和网络TCP
    还在用命令行看日志?快用Kibana吧,可视化日志分析YYDS
    深入C++纯虚函数和抽象类
    Ajax学习:同源策略(与跨域相关)ajax默认遵循同源策略
    【打卡】21天学习挑战赛—RK3399平台开发入门到精通-day13
    【SQL语法基础】什么是SQL的聚集函数,如何利用它们汇总表的数据?
    9类人事管理场景应用,泛微协助HR释放更多工作量
    Node.js编译失败怎么办?
    [锁]:乐观锁与悲观锁
    深入探讨Docker生态系统,Docker Compose vs. Docker Swarm vs. Kubernetes:深入比较
  • 原文地址:https://blog.csdn.net/zheliku/article/details/134092189
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号