C# 常量(const)详解
                           
天天向上
发布: 2025-04-13 12:53:08

原创
617 人浏览过

本文章会站在专业开发工程师的角度,对 C# 中的常量(Constants) 进行全面、详细、权威可靠的阐述,涵盖:基本语法、使用场景、限制、与 readonly 的区别、最佳实践等内容,并提供权威链接(如微软官方文档)。


一、什么是常量?

在 C# 中,常量是在编译时其值就已经确定、并且无法被修改的变量。一旦定义,就不能更改。

使用关键字:const


二、基本语法

const 数据类型 常量名 = 值;

示例:

const int DaysInWeek = 7;
const string CompanyName = "OpenAI";
const double Pi = 3.14159;

三、常量的特性

特性说明
编译时确定常量的值必须在编译期间已知,不能运行时动态赋值
只能是基本类型const 只能用于 C# 的内置数据类型(int、double、string、char、bool 等)
隐式为 static常量是类级别的成员,不需要实例化类就可以访问
不可更改定义后无法赋新值
可用于 switch case、数组大小等编译时常量需求处

四、适合用常量的场景

  • 全局不变的值,如:
  • 一年中的月份数
  • 固定的数据库连接字符串前缀
  • 版本号信息
  • 状态码、权限码

五、与 readonly 的区别(面试常考)

对比项constreadonly
值设定时机编译时运行时(构造函数中)
可支持类型仅编译期常量类型任意类型(包括类、结构体、对象)
是否隐式 static否(可选择)
可否在构造函数赋值可以
使用场景固定不变,如π初始化后不变,如启动时间戳

示例:

public class Example {
    public const double Pi = 3.14159; // 编译时常量

    public readonly DateTime StartTime;

    public Example() {
        StartTime = DateTime.Now; // 运行时常量,只能赋值一次
    }
}

六、注意事项

  1. 不能用于复杂对象:
   // 错误
   const DateTime myTime = DateTime.Now;

使用 readonly 替代。

  1. 类级别访问:
   public class MyClass {
       public const string AppName = "MyApp";
   }

   Console.WriteLine(MyClass.AppName); // OK

七、结合枚举使用常量(高级场景)

虽然可以用 const 定义状态码,但使用 enum 更具可读性:

public enum StatusCode {
    Success = 200,
    NotFound = 404,
    ServerError = 500
}

八、C# 常量相关的官方文档链接


九、推荐实践

  • 对于编译时固定值,始终优先使用 const
  • 若需初始化复杂数据或依赖运行时计算,使用 readonly
  • 不要在 API 或公共接口中暴露 const,以防二进制兼容性问题(值会被内联)
  • 常量名建议使用 PascalCase(如 MaxValue),遵循 C# 命名规范

十、附加技巧:常量数组的替代方法

C# 不支持 const string[],可用 readonly 配合 static 替代:

public static class Constants {
    public static readonly string[] AllowedExtensions = new[] { ".jpg", ".png", ".gif" };
}
更多详细内容,请关注其他相关文章!
发表回复 0

Your email address will not be published. Required fields are marked *