C#基础之结构体

news2024/10/6 8:10:31

结构体

在这里插入图片描述

文章目录

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

1、概念

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

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

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

2、基本语法

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

3、示例

//表现学生数据的结构体
struct Student{
    //结构体声明的变量不能直接初始化
    //Student s 不能包含自己的结构体
    public int age;
    bool sex;
    int number;
    string name;
    //在结构体中的方法不用static
    public 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或out
    public 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.coloradmin.cn/o/1626291.html

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

相关文章

谁是存储器市场下一个“宠儿”?

AI浪潮对存储器提出了更高要求&#xff0c;高容量、高性能存储产品重要性正不断凸显&#xff0c;存储产业技术与产能之争也因此愈演愈烈&#xff1a;NAND Flash领域&#xff0c;闪存堆叠层数持续提升&#xff1b;DRAM领域HBM持续扩产&#xff0c;技术不断迭代&#xff0c;同时3…

模仿学习IQ-Learn:Inverse soft-Q Learning for Imitation

论文地址&#xff1a;IQ-Learn: Inverse soft-Q Learning for Imitation 项目地址&#xff1a;IQ-Learn: Inverse soft-Q Learning for Imitation 一、相关概念&#xff1a; 强化学习&#xff08;RL&#xff09;&#xff1a;目标是学习一个最大化指定奖励函数的策略。 模仿…

java-Spring-(MyBatis框架-xml管理)

目录 前置条件 xml与注解比较 1.1 xml定义 1.2 和SQL注解比较 建包准备 插入数据 ​编辑 更新数据 删除数据 查询数据 查看单字段查询 &#x1f3f7;&#x1f4a3;前置条件 创建一个spring boot 初始化的项目 &#x1f3f7;&#x1f4a3;xml与注解比较 1.1 xml定义 …

WebGL开发框架比较

WebGL开发框架提供了一套丰富的工具和API&#xff0c;使得在Web浏览器中创建和操作3D图形变得更加容易。以下是一些流行的WebGL开发框架及其各自的优缺点。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.Three.js 优点&#xff1a…

iText生成PDF文件

导语&#xff1a; 本文基于 iText7 &#xff1a;7.1.16 生成。 官方文档链接&#xff1a;iText 从版本入口可进入到下面页面 一、引言 常见生成PDF文件的有两种方法&#xff0c;一是先生成 word文档&#xff0c;然后将word转换成PDF文件&#xff1b;另一种则是直接生成PDF文件…

javaEE--多线程学习-进程调度

进程调度不明白&#xff1f;看这一篇文章就够了&#xff0c;逻辑衔接严密&#xff0c;文末附有关键面试题&#xff0c;一个海后的小故事让你瞬间明白这里面的弯弯绕绕&#xff01; 目录 1.什么是进程&#xff1f; 2.进程控制块&#xff08;PCB&#xff09; 2.1 一个PCB就是一…

多数据源注解使用

<dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>3.5.0</version> </dependency> 1.使用mybatis-plus 如何配置多数据源&#xff0c;application-loc…

《QT实用小工具·三十五》基于PathView,Qt/QML做的一个可以无限滚动的日历控件

1、概述 源码放在文章末尾 改项目实现了基于PathView&#xff0c;Qt/QML做的一个可以无限滚动的日历控件&#xff0c;下面是demo演示&#xff1a; 项目部分代码如下所示&#xff1a; import QtQuick 2.7 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4Bu…

Qt:学习笔记一

一、工程文件介绍 1.1 main.cpp #include "widget.h" #include <QApplication> // 包含一个应用程序类的头文件 //argc&#xff1a;命令行变量的数量&#xff1b;argv&#xff1a;命令行变量的数组 int main(int argc, char *argv[]) {//a应用程序对象&…

深度学习突破:LLaMA-MoE模型的高效训练策略

在人工智能领域&#xff0c;大模型&#xff08;LLM&#xff09;的崛起带来了前所未有的进步&#xff0c;但随之而来的是巨大的计算资源需求。为了解决这一问题&#xff0c;Mixture-of-Expert&#xff08;MoE&#xff09;模型架构应运而生&#xff0c;而LLaMA-MoE正是这一架构下…

屌爆了,国产智能体的爆发性增长:一周数据揭秘

前言 自从4.19接入国内智能体 探索国产智能体&#xff1a;从GPTs使用热潮到本土模型的崛起 截止到今天(4.26)&#xff0c;仅仅一周时间&#xff0c;数据太让我意外了&#xff0c;这篇文章就来总结一下&#xff01; 这一次&#xff0c;我为国产智能体崛起&#xff0c;代言!!! 惊…

释放Stable Diffusion 无限可能

最近在整理大语言模型的系列内容&#xff0c;Stable Diffusion 是我下一篇博客的主题。关注 Stable Diffusion&#xff0c;是因为它是目前最受欢迎和影响力最大的多模态生成模型之一。Stable Diffusion 于 2022 年 8 月发布&#xff0c;主要用于根据文本的描述产生详细图像&…

《欢乐钓鱼大师》攻略,钓友入坑必备!

欢迎来到《欢乐钓鱼大师》&#xff01;在这个游戏里&#xff0c;你可以尽情享受垂钓的乐趣&#xff0c;通过不断更换和升级高阶鱼竿&#xff0c;轻松地钓到各种稀有鱼类。因为许多玩家在挑战关卡时遇到了一些困难&#xff0c;所以今天我给大家带来了《欢乐钓鱼大师攻略指南》&a…

第 3 篇 : Netty离线消息处理(可跳过)

说明 仅是个人的不成熟想法, 未深入研究验证 1. 修改 NettyServerHandler类 package com.hahashou.netty.server.config;import com.alibaba.fastjson.JSON; import io.netty.channel.Channel; import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelHan…

Vue3中使用无缝滚动插件vue3-seamless-scroll

官网&#xff1a;https://www.npmjs.com/package/vue-seamless-scroll 1、实现效果文字描述&#xff1a; 表格中的列数据进行横向无缝滚动&#xff0c;某一列进行筛选的时候&#xff0c;重新请求后端的数据&#xff0c;进行刷新 2、安装&#xff1a;npm i vue3-seamless-scrol…

从Kafka的可靠性设计体验软件设计之美

目录 1. Kafka可靠性概述 2. 副本剖析 2.1 什么是副本 2.2 副本失效场景 2.3 数据丢失场景 2.4 解决数据丢失方案 3. 日志同步机制 4. 可靠性分析 1. Kafka可靠性概述 Kafka 中采用了多副本的机制&#xff0c;这是大多数分布式系统中惯用的手法&#xff0c;以此来实现水平扩…

异步日志方案spdlog

异步日志方案spdlog spdlog 是一款高效的 C 日志库&#xff0c;它以其极高的性能和零成本的抽象而著称。spdlog 支持异步和同步日志记录&#xff0c;提供多种日志级别&#xff0c;并允许用户将日志输出到控制台、文件或自定义的接收器。 多线程使用和同步、异步日志没有关系是…

10.接口自动化测试学习-Pytest框架(2)

1.mark标签 如果在每一个模块&#xff0c;每一个类&#xff0c;每一个方法和用例之前都加上mark标签&#xff0c;那么在pytest运行时就可以只运行带有该mark标签的模块、类、接口。 这样可以方便我们执行自动化时&#xff0c;自主选择执行全部用例、某个模块用例、某个流程用…

indexDB 大图缓存

背景 最近在项目中遇到了一个问题&#xff1a;由于大屏背景图加载速度过慢&#xff0c;导致页面黑屏时间过长&#xff0c;影响了用户的体验。从下图可以看出加载耗时将近一分钟 IndexDB 主要的想法就是利用indexDB去做缓存&#xff0c;优化加载速度&#xff1b;在这之前&am…

自动驾驶传感器篇: GNSSIMU组合导航

自动驾驶传感器篇&#xff1a; GNSS&IMU组合导航 1.GNSS1.1 GNSS 系统概述1.2 GNSS系统基本组成1. 空间部分&#xff08;Space Segment&#xff09;&#xff1a;2. 地面控制部分&#xff08;Ground Control Segment&#xff09;&#xff1a;3. 用户设备部分&#xff08;Use…