C#常量(const)与枚举(enum)使用指南

一、 常量 (const)

常量,就是一个其值在程序编译时就已经确定,并且在整个运行期间都不能被修改的量。

如何声明常量?

使用 const 关键字进行声明,并且必须在声明时就进行初始化。

csharp 复制代码
const double PI = 3.14159;
const int DAYS_IN_WEEK = 7;
const string AppVersion = "1.0.2";

命名约定:常量的名称通常使用全大写字母,并用下划线分隔单词,以示区别。

const vs readonly

你可能还会遇到 readonly (只读) 关键字,它与 const 类似但有一个关键区别:

  • const 的值必须在编译时确定。
  • readonly 的值可以在运行时确定(在构造函数中赋值),但一旦赋值后就不能再更改。
csharp 复制代码
public class Config
{
    // 编译时常量
    public const int DefaultTimeout = 5000; 

    // 运行时只读字段
    public readonly DateTime CreationTime;

    public Config()
    {
        // readonly 字段可以在构造函数中初始化
        CreationTime = DateTime.Now; 
    }
}

二、 枚举 (enum)

枚举 (enum)允许我们定义一个由一组命名的常量组成的集合,这个集合本身成为一个新的类型。

如何声明和使用枚举?

使用 enum 关键字来定义。

csharp 复制代码
// 定义一个订单状态的枚举
public enum OrderStatus
{
    Pending,    // 待处理
    Processing, // 处理中
    Shipped,    // 已发货
    Completed,  // 已完成
    Cancelled   // 已取消
}

现在,OrderStatus 就成了一个新的数据类型。我们可以这样使用它:

csharp 复制代码
// 声明一个枚举类型的变量
OrderStatus currentStatus = OrderStatus.Pending;

// 在逻辑判断中使用,代码清晰易读
if (currentStatus == OrderStatus.Shipped)
{
    Console.WriteLine("订单已发货!");
}

// 在 switch 语句中使用,是枚举的最佳拍档
switch (currentStatus)
{
    case OrderStatus.Pending:
        // ...
        break;
    case OrderStatus.Processing:
        // ...
        break;
    // ... 其他状态
    default:
        // ...
        break;
}

枚举的优势:

  1. 强类型安全 :你不能将一个随意的整数赋给一个枚举变量,编译器会阻止你犯错。这避免了将无效的状态码(比如 orderStatus = 10)赋给变量的可能。
  2. 极佳的可读性OrderStatus.Completed 清晰地表达了其含义,而数字 3 则不能。你的代码会变得"自解释"。
  3. 智能提示(IntelliSense):在Visual Studio等IDE中,当你输入枚举变量时,会自动提示所有可用的成员,极大提高了开发效率并减少了拼写错误。

枚举的底层机制

默认情况下,枚举的每个成员都对应一个整数,从0开始依次递增 (Pending 是 0, Processing 是 1, ...)。你也可以显式地为它们指定值,或者更改其底层的类型(默认为 int)。

csharp 复制代码
public enum ErrorCode : ushort // 可以指定底层类型
{
    None = 0,
    NotFound = 404,
    InternalServerError = 500,
    AccessDenied = 403
}

结语

点个赞,关注我获取更多实用 C# 技术干货!如果觉得有用,记得收藏本文!

相关推荐
嬉皮客1 小时前
Gird布局详解
前端·css
Wect2 小时前
学习React-DnD:实现多任务项拖拽-useDrag处理
前端
mucheni2 小时前
迅为RK3568开发板OpeHarmony学习开发手册-修改应用程序名称
linux·前端·学习
WebGirl2 小时前
SSE服务
前端
Mintopia2 小时前
🛰️ 低带宽环境下的 AIGC 内容传输优化技术
前端·人工智能·trae
h***34632 小时前
Nginx 缓存清理
android·前端·后端
Mintopia2 小时前
⚡Trae Solo Coding 的效率法则
前端·人工智能·trae
wa的一声哭了2 小时前
WeBASE管理平台部署-WeBASE-Web
linux·前端·网络·arm开发·spring boot·架构·区块链
孟陬2 小时前
我的 starship 终端配置
前端