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

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 等
  • 类似分部类,可以声明分部结构。

相关文章:

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…...

车载电子电器架构 —— 基于AP定义车载HPC

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…...

Redis原理-IO模型和持久化

高性能IO模型 为什么单线程Redis能那么快 一方面,Redis 的大部分操作在内存上完成,再加上它采用了高效的数据结构,例如哈希表和跳表,这是它实现高性能的一个重要原因。另一方面,就是 Redis 采用了多路复用机制&#…...

PID控制示例

PID控制简单示例 import numpy as np import matplotlib.pyplot as plt import copy# 定义曲线函数 y sin(x) def target_curve(x):return np.sin(x)class PID:def __init__(self, kp, ki, kd):self.kp kpself.ki kiself.kd kdself.ep 0.0self.ei 0.0self.ed 0.0self.d…...

GoLand GC(垃圾回收机制)简介及调优

GC(Garbage Collector)垃圾回收机制及调优 简单理解GC机制 其实gc机制特别容易理解,就是物理内存的自动清理工。我们可以把内存想象成一个房间,程序运行时会在这个房间里存放各种东西,但有时候我们会忘记把不再需要的东西拿出去&#xff0c…...

AI:40-基于深度学习的森林火灾识别

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌本专栏包含以下学习方向: 机器学习、深度学…...

37基于MATLAB平台的图像去噪,锐化,边缘检测,程序已调试通过,可直接运行。

基于MATLAB平台的图像去噪,锐化,边缘检测,程序已调试通过,可直接运行。 37matlab边缘检测图像处理 (xiaohongshu.com)...

通过Metasploit+Ngrok穿透内网长期维持访问外网Android设备

前言: 因为之前作为小白我不会在Kali Linux里面把IP映射出外网,卡在那个地方很久,后来解决了这个问题就写方法出来和大家分享分享。 环境: Kali Linux系统(https://www.kali.org/downloads/) Metasploit Ngrok Linux64位的端口转发工具(htt…...

STM32 CubeMX配置USB HID功能,及安装路径

STM32CubeMX学习笔记(46)——USB接口使用(HID自定义设备) STM32CubeMX实现STM32 USBHID双向64字节通信(下位机部分) STM32 USB HID设置(STM32CubeMX) 关于keil 5安装出现Fail to set path to Software Packs.问题解决方法...

【错误解决方案】ModuleNotFoundError: No module named ‘transformers‘

1. 错误提示 在python程序中,尝试导入一个名为transformers的模块,但Python提示找不到这个模块。 错误提示:ModuleNotFoundError: No module named ‘transformers‘ 2. 解决方案 所遇到的问题是Python无法找到名为transformers的模块&am…...

Mac 配置环境变量

Mac 配置环境变量 修改配置文件 vim ~/.bash_profile i进入编辑模式. Esc:wq 保存文件 esc:q 退出 如:jdk环境变量配置 JAVA_HOME/Library/Java/JavaVirtualMachines/jdk1.8.0_361.jdk/Contents/Home CLASSPATH J A V A H O M E / l i b / t o o l…...

如何在linux服务器上安装Anaconda与pytorch,以及pytorch卸载

如何在linux服务器上安装Anaconda与pytorch,以及pytorch卸载 1,安装anaconda1.1 下载anaconda安装包1.2 安装anaconda1.3 设计环境变量1.4 安装完成验证 2 Anaconda安装pytorch2.1 创建虚拟环境2.2 查看现存环境2.3 激活环境2.4 选择合适的pytorch版本下…...

ansble

ansble概述 Ansible是一款自动化运维工具,基于Python开发,具有批量系统配置,批量程序部署, 批量运行命令等功能。 Ansible的很多模块在执行时都会先判断目标节点是否要执行任务,所以,可以放心大胆地让Ansible去执行任务&#xf…...

git常见命令(持续更新)

判断是否为git项目 一个repo可以由多个git项目组成,一般每个git项目的根目录下都会有**.git**的文件夹;使用任何git命令前都需要打开到git项目文件下面。 git log 不带参数 // 查看本次commit修改的地方 git log-p // 可以查看FileName从建立到现在…...

Python基础入门例程23-NP23 删除好友(列表)

最近的博文: Python基础入门例程22-NP22 删除简历(列表)-CSDN博客 Python基础入门例程21-NP21 增加派对名单(二)(列表)-CSDN博客 Python基础入门例程20-NP20 增加派对名单(一&#x…...

识别鼠标选中actor_vtkInteractorStyleTrackballActor

开发环境: Windows 11 家庭中文版Microsoft Visual Studio Community 2019VTK-9.3.0.rc0vtk-example参考代码目的:学习与总结 demo解决问题:通过自定义vtkInteractorStyle类中成员函数OnLeftButtonDown,判断鼠标当前选中的是哪个…...

C++ Qt关于启动可执行文件存在的问题

如果软件具有管理员权限。请略过 使用QProcess 如果不具有管理员权限 启动可执行文件,在Debug和Release中没有问题,但是如果可执行文件启动需要管理员权限,调用函数startDetached,win10/11去要在点击用户账户控制弹窗 当使用I…...

微信定时发圈,快人一步不落索

现在的社交媒体运营已经成为了私域流量获取的重要手段,而微信作为最大的社交平台之一,更是吸引了众多使用者。但是,你是否曾经感叹过每天手动发朋友圈的繁琐?是否希望能够事先设置好定时发送的功能,让你的朋友圈自动更…...

数据分析在程序员职业中的重要性及实践应用

一、引言 在当今信息化社会的快速发展中,数据分析已经成为一项重要的职业技能。不论是从事哪个行业,都需要具备一定的数据分析能力。对于程序员而言,掌握数据分析技能不仅能够提升自身在职场中的竞争力,更能够在职业生涯中获得更…...

计算机网络_04_传输层

文章目录 1.什么是传输层2.传输层提供了什么服务3.传输层协议TCP 1.什么是传输层 传输层是OSI七层体系架构中的第四层, TCP/IP四层体系架构中的第二层, 从通信和信息处理两方面来看,“传输层”既是面向通信部分的最高层,与下面的三层一起共同构建进行网…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...

恶补电源:1.电桥

一、元器件的选择 搜索并选择电桥&#xff0c;再multisim中选择FWB&#xff0c;就有各种型号的电桥: 电桥是用来干嘛的呢&#xff1f; 它是一个由四个二极管搭成的“桥梁”形状的电路&#xff0c;用来把交流电&#xff08;AC&#xff09;变成直流电&#xff08;DC&#xff09;。…...

论文阅读:Matting by Generation

今天介绍一篇关于 matting 抠图的文章&#xff0c;抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法&#xff0c;已经有很多的工作和这个任务相关。这两年 diffusion 模型很火&#xff0c;大家又开始用 diffusion 模型做各种 CV 任务了&am…...