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

C#基础(13)结构体

前言

随着函数的讲解完成,我想你已经初步有了写一些复杂逻辑功能的能力,但是我们会发现其实在我们大部分实际开发情况中,很多我们需要写的变量可能不只有一个属性。

他可能有很多变量,那这时候我们如果要把这些变量集中到一个东西身上,就需要结构体这个特殊的数据类型。

结构体是一种在编程语言中用来组织和存储相关数据的数据类型。它的历史可以追溯到20世纪60年代早期,在那个时候,编程语言的数据类型常常是原始的,无法直接表示复杂的数据结构。

1960年代的Fortran语言是第一个引入结构体概念的编程语言。在Fortran中,结构体被称为“记录”(record),它由一系列字段组成,每个字段都有自己的名称和类型。记录可以用于组织和存储相关的数据,使得程序变得更加灵活和可读。

C语言是在20世纪70年代早期引入结构体的编程语言之一。C语言的结构体与Fortran的记录类似,它也是由一系列字段组成的数据类型。C语言的结构体被广泛应用于数据结构、函数参数和返回值等方面。

随着时间的推移,结构体逐渐在其他编程语言中得到了广泛应用和支持。在面向对象编程语言中,结构体通常被称为“类”或“对象”,并具有更强大的功能和概念。

总的来说,结构体的历史可以追溯到20世纪60年代,它是为了解决编程语言中数据组织和存储的问题而引入的。结构体通过定义一系列字段,可以将相关的数据组织在一起,提高程序的可读性和灵活性。

c#中博主也会进行类和结构体的区别的讲解,不过在此之前,我们先来了解到底结构体是什么。

概念

结构体是一种自定义变量类型,类似枚举,需要自己定义

它是数据和函数的结合,在结构体中,可以声明各种变量和方法,我们可以将他们看做一个整体。

基本语法

注意:

  1. 结构体一般写在namespace里
  2. 结构体的关键字struct
sturct 自定义结构体名(帕斯卡命名法)
{//变量,不能直接初始化。变量类型随便,包括结构体,但是不能是自己的结构体//构造函数//函数方法,表示这个数据结构的行为,在结构体中的方法不需要加static
}

 具体实例

下面是一个使用C#编写的学生成绩结构体:

简单实现了输入名字和分数并将二者打印出来的效果。

using System;struct StudentGrade
{public string name;public int score;public void DisplayGrade(){Console.WriteLine("学生姓名:" + name);Console.WriteLine("学生成绩:" + score);}
}class Program
{static void Main(string[] args){StudentGrade student;Console.Write("请输入学生姓名:");student.name = Console.ReadLine();Console.Write("请输入学生成绩:");student.score = Convert.ToInt32(Console.ReadLine());Console.WriteLine("\n学生信息如下:");student.DisplayGrade();Console.ReadLine();}
}

我们实际情况可能会更复杂,但是这里只是给你展示一下结构体的功能,所以你能感受到结构体本身如何申明和使用就可以。

你可能注意到了一个新的关键词public,这个是访问修饰符,我们等下就进行讲解。

访问修饰符

概念:修饰结构体中变量和方法,是否能被外部使用

  • public 公共的 可以被结构体外部访问
  • private 私有的 只能在结构体内部使用

tips:默认不写都是private。

结构体的构造函数

  1. 没有返回值

  2. 函数名必须和结构体名相同

  3. 必须有参数

  4. 申明了构造函数,就必须在其中对所有变量数据初始化
     

例子

using System;struct StudentGrade
{public string name;public int grade;public StudentGrade(string name, int grade){this.name = name;//本身的name变量等于传入的name值this.grade = grade;}public void DisplayInformation(){Console.WriteLine("Name: {0}", name);Console.WriteLine("Grade: {0}", grade);}
}class Program
{static void Main(string[] args){// 创建学生成绩实例StudentGrade student = new StudentGrade("John Doe", 85);// 显示学生成绩信息student.DisplayInformation();Console.ReadLine();}
}

新关键词:this,代表结构体本身

总结

结构体的知识点就学完了,我想如果你掌握了结构体的知识,已经可以实现一些有具体功能的控制台应用了:学生分数管理器,或者说初学者必写的贪吃蛇。

其实你晃一眼看,都会觉得很简单,但是所有优秀的程序猿都会自己动手去敲代码。

一定要多练多写,你可以在我这里补充知识,但是练习敲代码,这个是我无法帮你完成的。

闲话不多说,请期待我下一篇博客。

相关文章:

C#基础(13)结构体

前言 随着函数的讲解完成,我想你已经初步有了写一些复杂逻辑功能的能力,但是我们会发现其实在我们大部分实际开发情况中,很多我们需要写的变量可能不只有一个属性。 他可能有很多变量,那这时候我们如果要把这些变量集中到一个东…...

Excel图片批量插入单元格排版处理插件【图片大师】

为了方便大家在图片的插入排版的重复工作中解放出来,最近发布了一款批量插入图片的插件,欢迎大家下载,免费试用。 这是图片的文件夹: 主要功能如下: 1,匹配单元格名称的多张图批量插入到一个单元格 该功能支持设置图…...

应用性能优化实践(二)提升应用启动和响应速度

一、提升应用启动和响应速度的方法 1、冷启动过程简介 应用启动时,后台无该应用的进程,需要创建新的进程,这种启动方式叫冷启动。 2、使用异步加载 使用异步加载可以在后台线程中处理耗时操作,从而提升应用响应速度。 3、延迟加载…...

接口测试系列文章专题

在你眼中什么是接口 HTTP协议 什么是接口测试 接口测试之工具 fiddler工具的原理 fiddler工具界面详解 fiddler工具的基本使用 fiddler使如何对手机app进行抓包的呢 fiddler手机app抓包教程 Charles自定义接口返回的数据内容 常用接口工具postman的基本使用方式 pos…...

Unity Hub自动安装指定版本Unity的Android开发环境

Unity开发Android环境要求SDK、DNK、JDK、Gradle版本都要对才能发布APK,自己去配置很容易出错。Unity Hub可以自动安装指定版本Unity的Android开发环境。 1.安装国内用的UnityHub(我这里用的3.3.2-c6) 2.找到对应的Unity版本 3.点击【从Unit…...

从0开始学ARM

1. ARM模式和寄存器 1.1 ARM处理器工作模式 Cortex系列之前的ARM处理器工作模式一共有7种。 1.1.1 工作模式 Cortex系列的ARM处理器工作模式有8种,多了1个monitor模式,如下图所示: ARM之所以设计出这么多种模式出来,就是为了…...

每日一题——第九十四题

// SortNumInFile.cpp : 此文件包含 “main” 函数。程序执行将在此处开始并结束。 // 题目:将一个文本文件number.txt中的数字按照从小到大排列后,重新写入到该文件中,要求排序前和排序后都输出该文件的内容。该文件中共有20个整数&#xf…...

Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解

目录 一、Linux软件包管理器 - yum(ubuntu用apt代替yum)1、Linux下安装软件的方式2、认识 yum3、查找软件包4、安装软件5、如何实现本地机器和云服务器之间的文件互传 二、Linux编辑器 - vim1、vim 的基本概念2、vim 下各模式的切换3、vim 命令模式各命令…...

后续学习规划 ----含我个人的学习路线,经历及感受

目前的基础 开发相关(最重要) 1.Java SE 从入门到起飞 2.Java Web开发 3.苍穹外卖 以上三个是和开发相关的基础。 我是按照书写的顺序学习的,有需要的朋友可以参考。 计算机相关 其他的话,都是比较久远的了。隔得时间一年半…...

Skytower

一、安装配置靶机 下载地址: SkyTower: 1 ~ VulnHub 下载之后解压发现是VirtualBox格式的 我们下载一个VirtualBox,这是官网 Downloads – Oracle VirtualBox 安装到默认路径就 打开后点击注册 选择解压后的vbox文件 然后点击左上角管理 点击导出虚拟电脑&…...

成型的程序

加一个提示信息 加上python 常用的包 整个程序打包完 250M 安装 960MB matplot numpy pandas scapy pysearial 常用的包 (pyvisa)… … 啥都有 Python 解释器组件构建 要比 lua 容易的多 (C/Rust 的组件库)...

卡尔曼滤波中Q和R与噪声的关系

卡尔曼滤波 一种用于估计系统状态的递归滤波器,通过融合传感器测量和系统模型,提供系统状态的最优估计。 Q和R是什么 在卡尔曼滤波中,Q和R分别表示过程噪声和测量噪声的协方差矩阵。 Q Q Q矩阵(过程噪声协方差矩阵)…...

sicp每日一题[2.10]

Exercise 2.10 Ben Bitdiddle, an expert systems programmer, looks over Alyssa’s shoulder and comments that it is not clear what it means to divide by an interval that spans zero. Modify Alyssa’s code to check for this condition and to signal an error if i…...

MCN跨国企业如何从0到1搭建ITSM运维体系

1. IT运维体系概述 1.1 定义与目标 IT运维体系,即信息技术运维管理体系,是指企业为了保障IT基础设施和业务系统的稳定、高效、安全运行,所建立的一系列管理流程、规范、工具和组织的总称。其核心目标是通过对IT资源的集中管理和服务&#x…...

【C++入门学习】7. 类型

基本类型 修饰符类型 基本类型 类型关键字布尔型bool字符型char整型int浮点型float双浮点型double无类型void宽字符型wchar_t 字符型char只占八位,存储ascii码的,而宽字符型是为了存储多国语言的代码unicode。 // 宽字符型的定义 typedef short int …...

视频服务器:GB28181网络视频协议

一、前言 某项目中需要集成视频管理平台,实现分布在各省公司的摄像及接入,对视频进行统一管理。本项目中视频管理平台采用GB/T28181实现的监控设备接入管理平台,支持在开放互联网和局域网对监控设备进行远程接入、远程管理、远程调阅、录像回…...

vue3 一次二次封装element-plus组件引发的思考

前言 在开发 Vue 项目中我们一般使用第三方 UI 组件库进行开发,如 Element-Plus、Element-ui、Ant-design等, 但是这些组件库提供的组件并不一定都能满足我们的日常开发需求,有时候我们需要实现的效果是直接使用组件库无法实现的,那么这时我们就可以通过对组件库的组件进行…...

[Web安全 网络安全]-文件读取与下载漏洞

文章目录: 一:任意文件读取漏洞 1.定义 2.危害 3.产生原因 4.发现漏洞 5.利用漏洞 6.防范措施 7.读取漏洞举例 二:任意文件下载漏洞 1.定义 2.漏洞利用 3.漏洞挖掘 4.漏洞验证 5.漏洞防御修复 pikachu靶场:是一个…...

2024.9.12(k8s环境搭建2)

一、接9.11 19、部署calico的pod 4. 查看容器和节点状态 异常处理: 出现Init:0/3,查看node节点 /var/log/messages是否有除网络异常之外的报错信息 三台机器执行:(更新版本) yum list kernel yum update kernel reb…...

Redis 字典的哈希函数和 rehash 操作详解

Redis 字典的哈希函数和 rehash 操作详解 在 Redis 中,字典(Hash Table)是一种重要的数据结构,用于存储键值对。下面解释 Redis 字典的哈希函数和 rehash 操作。 一、哈希函数 作用 Redis 的字典使用哈希函数将键转换为一个整数索引,这个索引用于确定键值对在哈希表中的…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage)&#xff1a…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道

文/法律实务观察组 在债务重组领域,专业机构的核心价值不仅在于减轻债务数字,更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明,合法债务优化需同步实现三重平衡: 法律刚性(债…...