C#基础之结构体

结构体

在这里插入图片描述

文章目录

      • 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);
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PCIe总线-MPS MRRS RCB参数介绍(四)

1.概述 PCIe总线的存储器写请求、存储器读完成等TLP中含有数据负载&#xff0c;即Data Payload。Data Payload的长度和MPS&#xff08;Max Payload Size&#xff09;、MRRS&#xff08;Max Read Request Size&#xff09;和RCB&#xff08;Read Completion Boundary&#xff0…

计算机存储原理.2

1.主存储器与CPU之间的连接 2.存储器芯片的输入输出信号 3.增加主存的存储字长 3.1位扩展 数据总线的利用成分是不充分的(单块只能读写一位)&#xff0c;为了解决这个问题所以引出了位扩展。 使用多块存储芯片解决这个问题。 3.2字扩展 因为存储器买的是8k*8位的&am…

硬件21、接线端子XH2.54、2.54排针排母、2510接插件、PH2.0、町洋接线端子5.08、ISP接口JTAG插座

XH2.54端子的间距为2.54毫米&#xff0c;2.54排针排母的间距也是2.54mm&#xff0c;2510接插件也是2.54、而PH2.0端子的间距为2.0毫米&#xff0c;町洋接线端子插针间的距离是5.08mm&#xff0c;ISP接口JTAG插座针脚的间距一般也是2.54mm XH2.54 针脚间距为2.54mm 插头 接线…

IIS中搭建.Net Core项目,步骤详解

一、准备服务器 1&#xff09;安装IIS 这个比较简单&#xff0c;百度一下就行 2&#xff09;安装 .NET Core 运行时 下载地址&#xff1a;下载 .NET(Linux、macOS 和 Windows) 因为我是本地开发&#xff0c;所以我下载的是SDK 安装成功之后显示如下&#xff1a; 检查是否安装…

判断字符串由几个单词组成(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int world 0;int i 0;char c 0;char string[81] { 0 };int num 0;//提示用户&#xff…

使用Github Action实现Hexo博客自动化部署

本文参考自 Akilar&#xff0c;原文地址&#xff1a;https://akilar.top/posts/f752c86d/ 每次部署Hexo都需要运行指令三件套&#xff0c;随着文章越来越多&#xff0c;编译的时间也随之越来越长&#xff0c;通过Github Action&#xff0c;我们只需要在每次完成博客的编写或修…

OSPF路由计算

1.区域内路由计算 &#xff08;1&#xff09;LSA的基本概念 LS Age&#xff1a;当LSA被始发时&#xff0c;该字段为0&#xff0c;随着LSA在网络中被泛洪&#xff0c;该时间逐渐累加&#xff0c;当到达MaxAge&#xff08;缺省值为3600s&#xff09;时&#xff0c;LSA不再用于路…

传统过程自动化工厂的智能扩展

一 通过NOA概念&#xff0c;公开、安全地迈向未来 随着数字化转型在过程自动化工业中的不断深入&#xff0c;许多公司都面临着同一挑战——如何平衡创新和传统。放眼望去&#xff0c;过程自动化工业和信息技术似乎在以不同的速度发展。虽然过程自动化工厂通过使用传统的自动化…

基于springboot实现企业oa管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现企业oa管理系统演示 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了企业OA管理系统的开发全过程。通过分析企业OA管理系统管理的不足&#xff0c;创建了一个计算机管理企业OA管理系统的方案…

C语言数据结构之栈

目录 1.栈的概念及结构2.栈的实现3.栈的代码实现4.相关例题 •͈ᴗ•͈ 个人主页&#xff1a;御翮 •͈ᴗ•͈ 个人专栏&#xff1a;C语言数据结构 •͈ᴗ•͈ 欢迎大家关注和订阅!!! 1.栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插…

AI大模型系列:自然语言处理,从规则到统计的演变

自然语言处理&#xff0c;从规则到统计的演变 自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;是人工智能的一个重要分支&#xff0c;主要研究如何让计算机理解、解释和生成人类语言。从自然语言处理的字面上来看&#xff0c;最重要的是“语言…

Unity | 集成 Protobuf(proto 转 cs 插件及序列化与反序列化)

1. 添加 dll 1. 下载 protobuf 源码 根据需要下载 protobuf 指定版本的源码&#xff0c;这里以 v3.21.12&#xff08;protobuf-csharp-3.21.12.zip&#xff09;为例&#xff1a; 下载地址&#xff1a;「https://github.com/protocolbuffers/protobuf/releases」 2. 下载 Vis…

防火墙技术基础篇:认识安全策略、安全区域、域间转发及报文转发流程

防火墙技术基础篇&#xff1a;认识安全策略、安全区域、域间转发及报文转发流程 一、安全策略匹配机制 简单通俗的讲&#xff0c;防火墙设备最基本的用途就是定义数据如何转发&#xff0c;靠什么定义呢&#xff1f;最基本的就是安全策略&#xff0c;当流量来到防火墙之后首先…

组播技术原理概述

组播与广播和单播的对比 l 组播、广播和单播工作模式的对比 单播&#xff1a;数据报文从一台主机&#xff0c;点对点的发给另外一台主机 广播&#xff1a;数据报文从一台主机&#xff0c;发给广播域内的全部主机 组播&#xff1a;数据报文从一台主机&#xff0c;发给…

JS----前端将列表数据转树型数据

前端将列表数据转树型数据 场景&#xff1a;后端返回列表数据&#xff0c;由前端根据业务需求完成树型数据转换&#xff0c; 常用于侧边导航菜单&#xff0c;下拉树型数据项等 export function listToTree(data: []) {var map: any {},tree: any []data.forEach((item: any…

ansible-playbook获取当前执行任务的ip及hostname

目录 概述注意实践代码 概述 注意 此问题&#xff0c;配置上一个文件即可解决 实践 代码 --- - name: Get IP Addresshosts: allgather_facts: notasks:- name: Get IP Addressansible.builtin.setup:register: host_ip- name: Print IP Addressansible.builtin.debug:msg:…

网络程序 -- TCP版服务器

一 多进程版TCP服务器 1.1 核心功能 对于之前编写的 字符串回响程序 来说&#xff0c;如果只有一个客户端进行连接并通信&#xff0c;是没有问题的&#xff0c;但如果有多个客户端发起连接请求&#xff0c;并尝试进行通信&#xff0c;服务器是无法应对的 原因在于 服务器是一个…

数据结构 - 队列 [动画+代码注释超详解],萌新轻松上手!!!

一. 队列的概念 队列是一种特殊的线性表&#xff0c;用于存储元素&#xff0c;并且按照先进先出(First In First Out)的顺序进行管理&#xff0c;这意味着最先加入队列的元素将会是最先从队列中被移除的元素 队列的原型&#xff1a;只允许在一端进行插入数据的操作&#xff0c…

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

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

使用SDRPI运行openwifi和设置网口

目录 一 制作启动盘 二 使用串口的方式启动openwifi 三 无线连接 四 网口设置&#xff0c;有线连接 五 使用SSH登录 一 制作启动盘 在github上下载img文件&#xff0c;由于github上下载速度比较慢&#xff0c;我会上传网盘链接 githun下载img文件地址: https://git…