一、 常量 (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;
}
枚举的优势:
- 强类型安全 :你不能将一个随意的整数赋给一个枚举变量,编译器会阻止你犯错。这避免了将无效的状态码(比如
orderStatus = 10)赋给变量的可能。 - 极佳的可读性 :
OrderStatus.Completed清晰地表达了其含义,而数字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# 技术干货!如果觉得有用,记得收藏本文!