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

【从零开始入门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,    // 0
    Monday,    // 1
    Tuesday,   // 2
    Wednesday, // 3
    Thursday,  // 4
    Friday,    // 5
    Saturday   // 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

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


http://www.kler.cn/a/442621.html

相关文章:

  • centos 8 中安装Docker
  • nexus搭建maven私服
  • C# 25Dpoint
  • C++中的STL
  • 【绝对无坑】Mongodb获取集合的字段以及数据类型信息
  • Android 对接口的封装使用
  • SEO初学者-SEO基础
  • 《云原生安全攻防》-- K8s安全框架:认证、鉴权与准入控制
  • 在JVM(Java虚拟机)中,PC寄存器(Program Counter Register)扮演着至关重要的角色。
  • STM32 IIC协议实现
  • 银行金融项目测试+常问面试题(附答案)
  • XXE-Lab for PHP
  • uniapp scroll-view 不生效排查
  • RT-Thread 的时钟管理
  • 3_使用 HTML5 Canvas API (2) --[HTML5 API 学习之旅]
  • Qt之自定义标题栏拓展(十)
  • Tree-of-Counterfactual Prompting for Zero-Shot Stance Detection
  • spring使用rabbitmq当rabbitmq集群节点挂掉 spring rabbitmq怎么保证高可用,rabbitmq网络怎么重新连接
  • 使用Python打造高效的PDF文件管理应用(合并以及分割)
  • Spring Boot 集成 Elasticsearch怎样在不启动es的情况下正常启动服务
  • 【21天学习AI底层概念】day5 机器学习的三大类型不能解决哪些问题?
  • 秒杀抢购场景下实战JVM级别锁与分布式锁
  • 四、网络层:数据平面,《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》
  • WPF 使用LibVLCSharp.WPF实现视频播放、停止、暂停功能
  • 【排序算法】——插入排序
  • .Net Core注册一个定制任务执行类服务