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

【从零开始入门unity游戏开发之——C#篇11】一个标准 C# 程序介绍、新的值类型——枚举

文章目录

  • 一、一个标准 C# 程序
    • 1、文件名(`Program.cs`):
    • 2、 `using` 语句:
    • 3、命名空间(`namespace`)
    • 4、类(`class`):
    • 4、入口函数(`Main` 方法)
    • 5、程序运行流程:
    • 6、总结
  • 二、`enum`枚举
    • 1、定义枚举
    • 2、设置枚举值
    • 3、在哪申明枚举
    • 3、使用枚举
    • 4、枚举和Switch天生一对
    • 5、枚举类型转换
      • 枚举和int互转
      • 枚举和string互转
    • 6、遍历枚举
    • 7、为什么需要枚举?
  • 专栏推荐
  • 完结

一、一个标准 C# 程序

下面我将通过一个简单的例子来介绍一个标准的 C# 程序结构,并简单解释文件名、命名空间、类、入口函数等概念。

文件名:Program.cs

using System;  // 引入命名空间namespace HelloWorld  // 定义命名空间
{class Program  // 定义类{// 程序的入口函数static void Main(string[] args){// 输出 Hello, World 到控制台Console.WriteLine("Hello, World!");}}
}

1、文件名(Program.cs):

  • C# 文件通常以 .cs 为扩展名,文件名通常与类的名字相同。在这个例子中,文件名是 Program.cs,并且定义了一个 Program 类。
  • 对于单一类文件,文件名和类名应该一致,这有助于保持代码的组织性。(不一定要求完全一致,但建议保持一致以便管理)
Program.cs

2、 using 语句:

using System;
  • using 用于引入命名空间,使你能够直接使用该命名空间中的类和方法,而不需要每次都写出完整的路径。
  • System 是一个内置的命名空间,包含了许多常用的类,比如 Console 类(用于控制台输入输出),String 类等。

3、命名空间(namespace

namespace HelloWorld
{// 代码...
}
  • namespace 用于组织代码并防止命名冲突。你可以将相关的类、接口、结构体等组织在同一个命名空间中。
  • 在这个例子中,我们定义了一个名为 HelloWorld 的命名空间,你可以随意取名字,但通常使用描述性的名字。

4、类(class):

class Program
{// 代码...
}
  • class 用于定义一个类。类是 C# 的基本构建块,包含了成员(如方法、属性等)。
  • Program 是一个类名,类名通常使用 Pascal 大驼峰命名法(即每个单词的首字母大写)。类本质上是对象的蓝图,可以包含各种功能和数据。

4、入口函数(Main 方法)

static void Main(string[] args)
{// 这里是C#程序的起始点
}
  • Main 方法是 C# 程序的入口点。每当程序启动时,Main 方法就会被执行。
  • static 表示该方法是静态的,可以直接通过类名调用,而不需要实例化类。
  • void 表示该方法没有返回值。
  • string[] args 是一个参数,表示命令行传递给程序的参数。虽然我们在这个例子中没有使用它,但它允许你在运行程序时从命令行传入参数。

5、程序运行流程:

  • 1.当程序启动时,操作系统会找到并运行 Main 方法。
  • 2.Main 方法中的代码会被执行,在这个例子中,程序会在控制台输出 Hello, World!

6、总结

  • 文件名:通常和类名相同,比如 Program.cs
  • 命名空间(namespace):用来组织代码,避免冲突。
  • 类(class):是程序中的基本构建块,包含方法和属性。
  • 入口函数(Main 方法):程序的执行从 Main 方法开始。
  • 方法(函数):执行某些任务的代码块。

二、enum枚举

在 C# 中,枚举(enum)是一种值类型、枚举是一个特别的存在,它是一个被命名的整形常数集合。一般用它来表示状态、类型等等。枚举使得代码更加清晰和易于维护,它将一组相关的数值标识为有意义的名字,避免使用魔法数字。

注意,枚举(enum) 是 值类型

1、定义枚举

枚举使用 enum 关键字定义,通常包含一组常量值。每个常量值会被赋予一个整数值,默认情况下,从 0 开始递增。

枚举名通常我们以E或者E_开头,作为我们的命名规范

比如

enum E_Days
{Sunday,    // 0Monday,    // 1Tuesday,   // 2Wednesday, // 3Thursday,  // 4Friday,    // 5Saturday   // 6
}

2、设置枚举值

你可以显式为枚举成员指定值。

enum E_Days
{Sunday = 1,Monday = 2,Tuesday = 4,Wednesday = 8,Thursday = 16,Friday = 32,Saturday = 64
}

3、在哪申明枚举

  • namespace语句块中(常用)
    在这里插入图片描述

  • class语句块中,struct语句块中
    在这里插入图片描述

  • 注意:枚举不能在方法(函数)语句块中申明!!!会直接报错
    在这里插入图片描述

  • 还可以和类一样,新建一个文件单独放枚举
    在这里插入图片描述

3、使用枚举

使用枚举时,通常会通过枚举名称来引用值。

E_Days today = E_Days.Monday;if(today == E_Days.Monday)
{Console.WriteLine("Today is Monday.");
}
else
{Console.WriteLine("Today is not Monday.");
}

4、枚举和Switch天生一对

枚举通常和Switch配合使用

E_Days today = E_Days.Monday;
switch(today)
{case E_Days.Monday:Console.WriteLine("Today is Monday.");break;case E_Days.Tuesday:Console.WriteLine("Today is Tuesday.");break;default:Console.WriteLine("Today is not Monday or Tuesday.");break;
}

5、枚举类型转换

枚举和int互转

枚举转int

int day = (int)E_Days.Monday;

int 转枚举

E_Days day2 = (E_Days)1;

枚举和string互转

枚举 转string

string day3 = E_Days.Monday.ToString();

string 转 枚举

E_Days day4 = (E_Days)Enum.Parse(typeof(E_Days), "Tuesday");

6、遍历枚举

你可以使用 Enum.GetValues 方法获取枚举类型的所有值。

foreach (E_Days day in Enum.GetValues(typeof(E_Days)))
{Console.WriteLine(day);
}

7、为什么需要枚举?

枚举的主要目的是使代码更加可读、可维护,并且减少硬编码(hardcoding)。以下是一些枚举的优点:

  • 提高代码可读性
    当你使用枚举时,你不需要再记住整数值。比如,DayOfWeek.Monday比单纯的数字1更有意义,代码也更加直观。
  • 减少错误
    使用枚举值时,你只会使用枚举中定义的常量值,而不能直接使用其他无关的数字或字符,这样可以有效避免错误。比如,如果没有枚举,你可能会用数字3来表示星期三,但一旦你需要改动,它可能就变成了错误的数字,或者你忘了修改。
  • 便于维护
    如果你需要修改某个枚举的常量值,只需要修改枚举定义,而不需要去查找和修改所有使用到这些值的代码。这样做既方便又减少出错的几率。
  • 提供自描述性
    枚举常量通常具有描述性,使得程序的意思更加明确。例如,使用枚举Status表示订单状态,而不是使用一个个数字(例如1表示待处理,2表示已完成)更加清晰。

专栏推荐

地址
【从零开始入门unity游戏开发之——C#篇】
【从零开始入门unity游戏开发之——unity篇】
【制作100个Unity游戏】
【推荐100个unity插件】
【实现100个unity特效】
【unity框架开发】

完结

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!

好了,我是向宇,https://xiangyu.blog.csdn.net

一位在小公司默默奋斗的开发者,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!如果你遇到任何问题,也欢迎你评论私信或者加群找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~
在这里插入图片描述

相关文章:

【从零开始入门unity游戏开发之——C#篇11】一个标准 C# 程序介绍、新的值类型——枚举

文章目录 一、一个标准 C# 程序1、文件名(Program.cs):2、 using 语句:3、命名空间(namespace)4、类(class):4、入口函数(Main 方法)5、程序运行流…...

vue 签名校验 md5 uuid

import CryptoJS from crypto-js import uuid from /utils/uuid import { SECRET_KEY } from /utils/config // 签名校验 const nonceStr uuid.uuid() const timestamp new Date().getTime() // const sign CryptoJS.MD5(nonceStr nonceStr &secretKey SECRET_KEY …...

CSS系列(16)-- 架构与模式详解

前端技术探索系列:CSS 架构与模式详解 🏗️ 致读者:探索 CSS 架构的艺术 👋 前端开发者们, 今天我们将深入探讨 CSS 架构与设计模式,学习如何构建可维护的样式系统。 CSS 架构方法论 🚀 OO…...

【go语言】reflect包与类型推断

reflect 包的核心概念 Go 中的反射涉及两个核心概念: Type:表示一个类型的结构体,reflect.Type 是类型的描述。Value:表示一个值的结构体,reflect.Value 是一个具体值的包装。 反射让我们能够动态地访问对象的类型和…...

3.python运算符

Python 提供了多种运算符,用于执行算术、比较、逻辑等各种操作。以下是 Python 中常见的运算符类型及其用法: 文章目录 1. 算术运算符2. 比较运算符3. 逻辑运算符4. 赋值运算符5. 位运算符6. 成员运算符7. 身份运算符8. 运算符优先级 1. 算术运算符 算…...

【竞技宝】CS2-上海major:spirit力克MOUZ niko梦碎

北京时间2024年12月15日,CS2上海major正在如火如荼的进行中,昨日迎来两场半决赛MOUZ对阵spirit以及FAZE对阵G2。Spirit和MOUZ和各自赢下了自己的选图之后,spirit双子星在图三抗住压力帮助队伍杀入决赛。而G2和FAZE的比赛中,FAZE依然延续上一场的火热手感完全压制了G2,G2的明星选…...

【Leetcode 每日一题】3266. K 次乘运算后的最终数组 II

问题背景 给你一个整数数组 n u m s nums nums,一个整数 k k k 和一个整数 m u l t i p l i e r multiplier multiplier。 你需要对 n u m s nums nums 执行 k k k 次操作,每次操作中: 找到 n u m s nums nums 中的 最小 值 x x x&a…...

etcd集群常见日志

1、节点失去领导者 {"level":"info","ts":"2024-05-07T01:54:04.948Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"raft.node: 9afce9447872453 lost le…...

【漫话机器学习系列】005.神经网络的结构(architecture on the neural network)

神经网络(Neural Network)是一种模拟人脑神经系统的计算模型,由大量相互连接的神经元(节点)组成,广泛应用于深度学习和机器学习领域。以下是神经网络的基本结构及关键组成部分。 1. 神经网络的基本组成 一…...

基于 Couchbase 数据仓库元数据管理的可行性方案

在大数据体系中,元数据管理是数据治理的关键一环。以下是一套元数据管理的可行性方案,适合你的当前架构设计(基于 Couchbase 数据仓库)并支持高效管理数据的分层与结构。 1. 元数据管理的目标 统一数据管理:清晰描述 …...

SpringBoot:快速构建微服务应用

一、SpringBoot简介 什么是SpringBoot 是由Pivotal团队提供的快速开发框架。它基于Spring框架,可以用于快速构建微服务应用程序。SpringBoot提供了一种快速、便捷的方式来启动和配置一个基于Spring的应用程序,它封装了很多常用的配置,简化了开…...

汽车嵌入式软件构建高效技术团队的全面思考

在汽车嵌入式软件开发领域,构建一支高效的通用技术团队至关重要。这类团队负责为各种项目提供可复用、标准化的技术基石,从而提高开发效率、降低成本并确保产品质量。构建这样的团队需要从技术能力、角色分工、标准化与复用、流程管理与质量保证、工具和…...

【跨库查询、多库查询】.NET开源 ORM 框架 SqlSugar 系列

文章目录 一、跨库方式1:跨库导航二、手动跨库查询三、同服务器:自动查询跨库查询3.1 Mysql和SqlServer自动3.2 自动: PgSql跨Scheme查询3.3 其他库同服务器 四、跨服务器:自动跨库查询4.1 配置SqlServer dblink4.2 配置 Oracle dblink4.3 配…...

智能人体安全防护:3D 视觉技术原理、系统架构与代码实现剖析

随着工业化程度的提高,生产安全已成为企业关注的重点。尤其是在一些存在禁区的工业厂区和车间,人员误入或违规进入将带来严重的安全隐患。为了解决这一问题,迈尔微视推出了智能人体安全检测解决方案,为企业提供全方位的人员安全监…...

第24周:文献阅读

目录 摘要 Abstract 一、现有问题 二、提出方法 三、创新点 模型结构创新 强化学习与GAN结合 属性特征与通顺性优化 四、方法论 生成对抗网络(GAN) 强化学习(RL) 模型组件 五、实验研究 数据集 数据预处理 评价指…...

yolov8 转华为昇腾om脚本

目录 yolov8 转华为昇腾 om脚本 测试ok 推理demo: yolov8 转华为昇腾 om脚本 测试ok import sys import osos.chdir(os.path.dirname(os.path.abspath(__file__)))import torchcurrent_dir = os.path.dirname(os.path.abspath(__file__))paths = [os.path.abspath(__file__)…...

分布式事物XA、BASE、TCC、SAGA、AT

分布式事务——Seata 一、Seata的架构: 1、什么是Seata: 它是一款分布式事务解决方案。官网查看:Seata 2.执行过程 在分布式事务中,会有一个入口方法去调用各个微服务,每一个微服务都有一个分支事务,因…...

域名信息收集(小迪网络安全笔记~

附:完整笔记目录~ ps:本人小白,笔记均在个人理解基础上整理,若有错误欢迎指正! 2.1 域名信息收集 引子:上一章介绍了服务器的信息收集。本篇则介绍在面对存在Web资产企业时,其域名信息该如何收…...

力扣-图论-13【算法学习day.63】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非…...

【设计模式】如何用C++实现观察者模式【发布订阅机制】

【设计模式】如何用C实现观察者模式【发布订阅机制】 一、问题背景 代码质量影响生活质量。最近工作中频繁接触各种设计模式,深刻体会到优秀的设计模式不仅能显著降低后续维护的压力,还能提升开发效率。观察者模式作为一种降低耦合度、提高扩展性的利器…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...

AspectJ 在 Android 中的完整使用指南

一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

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

9-Oracle 23 ai Vector Search 特性 知识准备

很多小伙伴是不是参加了 免费认证课程(限时至2025/5/15) Oracle AI Vector Search 1Z0-184-25考试,都顺利拿到certified了没。 各行各业的AI 大模型的到来,传统的数据库中的SQL还能不能打,结构化和非结构的话数据如何和…...

SpringAI实战:ChatModel智能对话全解

一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM&#xff0…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理

在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...