C#基础之结构体

结构体

在这里插入图片描述

文章目录

      • 1、概念
      • 2、基本语法
      • 3、示例
      • 4、结构体的使用
      • 5、访问修饰符
      • 6、结构体的构造函数
          • 思考1 描述矩形信息
          • 思考2 职业名字释放了技能
          • 思考3 小怪兽
          • 思考4 多个小怪兽
          • 思考5 奥特曼打小怪兽

1、概念

结构体是一种一定义变量类型

它是数据和函数的集合,可以在结构体中声明各种变量和方法

作用:用来表现存在关系的数据集

2、基本语法

1、结构体一般写在namespace语句块中
2、结构体关键字structstruct 自定义{变量构造函数函数}

3、示例

//表现学生数据的结构体
struct Student{//结构体声明的变量不能直接初始化//Student s 不能包含自己的结构体public int age;bool sex;int number;string name;//在结构体中的方法不用staticpublic void Speak(){Console.WriteLine("我的名字是{0},今年{1}岁",name,age);}
}

4、结构体的使用

Student student;
student.age;

5、访问修饰符

public	公共的
private 私有的 不写默认为private  

6、结构体的构造函数

1、没有返回值

2、函数名必须和结构体同名

3、必须有参数

4、如果声明了构造函数,必须在其中对所以变量数据初始化

public Student(int age, bool sex, int number, string name){//this.age 是上面结构体age,把传进来的参数赋值上去this.age = age;this.sex = sex;this.number = number;this. name = name;
}
Student s = new Student(18,true,2,"小王");
思考1 描述矩形信息
//使用结构体描述矩形信息,长宽;创建一个矩形信息
Rect rect = new(5, 4);
rect.Info();
struct Rect
{public float w;public float h;public float area;public float perimeter;public Rect(float wi, float hi){w = wi;h = hi;area = w * h;perimeter = 2 * (w + h);}public void Info(){Console.WriteLine("矩形的宽为{0},高为{1},面积为{2},周长为{3}", w, h, area, perimeter);}
}
思考2 职业名字释放了技能
//使用结构体描述玩家信息,玩家名字,玩家职业
//请用户输入玩家姓名,选择玩家职业
while (true)
{Console.WriteLine("请输入姓名");string name = Console.ReadLine();Console.WriteLine("请输入职业(0战士,1猎人,2法师)");try{Occupation occupation = (Occupation)int.Parse(Console.ReadLine());PlayerInfo playerInfo = new PlayerInfo(name, occupation);playerInfo.Atk();}catch{Console.WriteLine("格式错误");}
}
struct PlayerInfo
{public string name;public Occupation occupation;public PlayerInfo(string name, Occupation occupation){this.name = name;this.occupation = occupation;}public void Atk(){string occ = "";string skill = "";switch (occupation){case Occupation.Warrior:occ = "战士";skill = "冲锋";break;case Occupation.Hunter:occ = "猎人";skill = "冲锋";break;case Occupation.Master:occ = "法师";skill = "奥数冲击";break;default:break;}Console.WriteLine("{0}{1}释放了{2}", occ, name, skill);}
}
enum Occupation
{Warrior,Hunter,Master,
}
思考3 小怪兽
Monster[] monsters = new Monster[10];for (int i = 0; i < monsters.Length; i++)
{
monsters[i] = new Monster("小怪兽" + i);
monsters[i].Atk();}
//小怪兽
struct Monster
{public string name;public int atk;public Monster(string name){this.name = name;Random random = new Random();atk = random.Next(10, 31);}public void Atk(){Console.WriteLine("{0}的攻击力是{1}", name, atk);}
}
思考4 多个小怪兽
Monster[] monsters = new Monster[10];for (int i = 0; i < monsters.Length; i++)
{
monsters[i] = new Monster("小怪兽" + i);
monsters[i].Atk();}
//小怪兽
struct Monster
{public string name;public int atk;public Monster(string name){this.name = name;Random random = new Random();atk = random.Next(10, 31);}public void Atk(){Console.WriteLine("{0}的攻击力是{1}", name, atk);}
}
思考5 奥特曼打小怪兽
//结构体描述奥特曼与小怪兽
//定义一个方法实现奥特曼攻击小怪兽
//定义一个方法实现小怪兽攻击奥特曼
OutMan outMan = new OutMan("迪迦奥特曼",10,5,100);
Boss boss = new Boss("小怪兽", 8, 2, 100);while (true)
{outMan.Atk(ref boss);if (boss.hp <= 0){Console.WriteLine("{0}胜利",outMan.name);break;}boss.Atk(ref outMan);if (outMan.hp <= 0){Console.WriteLine("{0}胜利",boss.name);break;}Console.WriteLine("按任意键继续");Console.ReadKey(true);
}
struct OutMan
{public string name;public int atk;public int def;public int hp;public OutMan(string name,int atk,int def,int hp){this.name = name;this.atk = atk;this.def = def;this.hp = hp;}//结构体是值类型 想要在函数内部改变值类型信息,外部受影响,用ref或outpublic void Atk(ref Boss monster){monster.hp -= this.atk - monster.def;Console.WriteLine("{0}攻击了{1},造成了{2}点伤害,{3}剩余血量{4}",name,monster.name,atk - monster.def,monster.name,monster.hp);}
}
struct Boss
{public string name;public int atk;public int def;public int hp;public Boss(string name, int atk, int def, int hp){this.name = name;this.atk = atk;this.def = def;this.hp = hp;}public void Atk(ref OutMan outman){outman.hp -= this.atk - outman.def;Console.WriteLine("{0}攻击了{1},造成了{2}点伤害,{3}剩余血量{4}", name, outman.name, atk - outman.def, outman.name, outman.hp);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/4203.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Entity Framework6 Oracle 官网开发说明

Entity Framework, LINQ and Model-First for the Oracle Database

揭秘被忽视的商业模式:全民拼购助力客户实现日销千万的惊人业绩

今天&#xff0c;我想和大家分享一个颇具潜力的模式与玩法&#xff0c;尽管它在外界看来可能略显陈旧。这个模式曾被忽视&#xff0c;但我的一位客户却巧妙运用&#xff0c;实现了惊人的业绩——日销售额接近五千万&#xff0c;日订单量高达300万单。 值得注意的是&#xff0c;…

将文件导入数据库

#include <stdio.h> #include <sqlite3.h> #include <string.h> int main(int argc, const char *argv[]) { //打开数据库 sqlite3 *db NULL; if(sqlite3_open("./dict.db",&db) ! SQLITE_OK){ printf("sqlite…

Java 提取HTML文件中的文本内容

从 HTML 文件中提取文本内容是数据抓取中的一个常见任务&#xff0c;你可以将提取的文本信息用于编制报告、进行数据分析或其他处理。本文分享如何使用免费 Java API 从HTML 文件中提取文本内容。 安装免费Java库&#xff1a; 要通过Java提取HTML文本&#xff0c;需要用到Free…

QT——简易计算器(从0开始)

目录 一、题目描述&#xff1a; 二、创建工程&#xff1a; 1. ​编辑 2. 3. 4. 默认 5. 6. 7. 8. 默认 9. 创建完成 三、UI界面设计&#xff1a; 1. 添加按钮 1. 2. 按钮界面 3. 按钮绑定快捷键 2. 文本框添加 1. 文本框字体 2. 默认文本 3. 文本对齐方式…

Linux多线程(二) 线程同步 信号量互斥锁读写锁条件变量

多个进程同时访问某些资源时&#xff0c;必须考虑同步问题&#xff0c;以确保任一时刻只有一个进程可以拥有对资源的独占式访问。通常&#xff0c;程序对关键资源的访问代码只是很短的一段&#xff0c;我们称这段代码为关键代码段或者临界区&#xff0c;对进程同步&#xff0c;…

机器人系统开发ros2-基础实践01-学会自定义一个机器人动作aciton实体类

您之前在了解操作教程中了解了action 。与其他通信类型及其各自的接口&#xff08;主题/消息和服务/srv&#xff09;一样&#xff0c;您也可以在包中自定义操作。本教程向您展示如何定义和构建可与您将在下一个教程中编写的action服务器和action 客户端一起使用的操作。 需要理…

UE5 GAS开发P41-43 永久效果,去除永久效果,伤害区域,EnumClass,开始重叠与结束重叠事件

这一部分学习了怎么创建一个伤害性的地形(火焰地形,毒沼泽等都可以用这个方式创建) AuraEffectActor.h // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h" #include "GameplayEffect.h&q…

软件测试(Web自动化测试)(二)

一.Selenium WebDriver的基本应用 &#xff08;一&#xff09;安装浏览器驱动 1.关闭浏览器的自动更新功能 以Windows7&#xff08;64位&#xff09;操作系统为例&#xff0c;讲解如何关闭Chrome浏览器的自动更新。首先按下快捷键“WinR”&#xff0c;打开运行对话框&#x…

【c++】深入剖析与动手实践:C++中Stack与Queue的艺术

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;c笔记仓 朋友们大家好&#xff0c;本篇文章我们来到STL新的内容&#xff0c;stack和queue 目录 1. stack的介绍与使用函数介绍例题一&#xff1a;最小栈例题二&#xff1a;栈的压入、弹出队列栈的模…

Adobe Photoshop CC 2017无法打开解决方案

Adobe Photoshop CC 2017双击无反应&#xff0c;右键以管理员身份运行也没有反应 解决方案&#xff1a; 事件查看器中查看应用程序的事件 如果找到程序报错事件&#xff0c;网上下载ZXPSignLib-minimal.dll文件替换错误模块路径位置的该文件即可 ZXPSignLib-minimal.dll下载地…

树莓派驱动开发----spi flash设备w25q64开发

这期使用的是spi驱动开发框架&#xff0c;其实spi和iic合起来有一个 Regmap 子系统&#xff0c;下回讲这个&#xff01;&#xff01; 使用方法 &#xff1a;./w25q64App /dev/w25q64-device <cmd> <address> <cnt> <data> ... 可读写擦&#xff0…

大模型_alpaca-lora微调及推理部署

文章目录 lora是什么重要相关参数LoRA 的优势 微调部署下载项目切换到项目目录下切换conda环境模型下载微调数据集下载 启动微调失败1原因分析 失败2修改前修改后 推理部署 lora是什么 重要相关参数 lora_rank(int,optional): LoRA 微调中的秩大小。lora_alpha(float,optional…

【嵌入式AI开发】轻量级卷积神经网络MobileNetV2详解

前言:MobileNetV2网络先升维后降维,在降维时使用线性激活函数,带残差的Inverted bottleck模块,防止ReLU信息丢失。在图像分类、目标检测、语义分割等任务上实现了网络轻量化、速度和准确度的权衡。 回顾MobileNetV1的理论和MobileNetV2项目实战可查阅如下链接: 【嵌入式AI…

小程序线多点路图绘制

需求 当接口返回一连串地图坐标&#xff0c;需要根据这些坐标串联起来&#xff0c;形成一个线路图&#xff08;本次使用步行导航线路图&#xff09;。 思路 首先优先想到使用小程序Map组件的polyline属性去进行展示。但是我们发现直接使用该属性进行坐标绘制画出来的数据都是…

STL--string详解

STL基本内容 string是什么 string实质上是一个对象 string可看作一个串&#xff0c;类似字符数组 可以扩容&#xff0c;可以增删查改 可用下表访问操作符[]引用&#xff0c;修改某值 构造函数 默认构造 拷贝构造&#xff1a;参数为(string 或 char*) 求string对象的长度不…

逻辑回归模型与GBDT+LR——特征工程模型化的开端

随着信息技术和互联网的发展&#xff0c; 我们已经步入了一个信息过载的时代&#xff0c;这个时代&#xff0c;无论是信息消费者还是信息生产者都遇到了很大的挑战&#xff1a; 信息消费者&#xff1a;如何从大量的信息中找到自己感兴趣的信息&#xff1f;信息生产者&#xff…

PMBOK® 第六版 项目是什么

目录 读后感—PMBOK第六版 目录 项目定义 定义&#xff1a;项目是为创造独特的产品、服务或成果而进行的临时性工作。 项目的特征具备以下三点&#xff1a; 独特性&#xff1a;独一无二&#xff0c;无法简单重复过去的做法。 临时性&#xff1a;项目有明确的起点和终点&…

EOCR-i3MS-WRDUW电机保护器 韩国三和 进口施耐德

韩国三和&#xff0c;EOCR&#xff0c;SAMWHA&#xff0c;Schneider&#xff0c;施耐德&#xff0c;电机保护器&#xff0c;电动机保护器&#xff0c;电子式电动机保护继电器&#xff0c;电子式过电流继电器&#xff0c;电子式欠电流继电器&#xff0c;电子式电压继电器&#x…

一起陪伴走过20多年,XILINX五大系列CPLD/FPGA将于6月截止接单

一起陪伴走过20多年&#xff0c;XILINX五大系列CPLD/FPGA将于6月截止接单 Product Discontinuation Notice AMD/XILINX于2024年春节后&#xff0c;发布了最新的产品停产通知&#xff0c;产品系列包括&#xff1a;XC9500XL, CoolRunner XPLA 3, CoolRunner II, Spartan II, a…