导读:本期聚焦于小伙伴创作的《C#中常量是什么?如何定义和使用常量?》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C#中常量是什么?如何定义和使用常量?》有用,将其分享出去将是对创作者最好的鼓励。

在C#编程中,常量是指值在程序运行期间不会发生变化的量,合理使用常量可以让代码更易维护,也能避免魔法值带来的可读性问题。下面我们就来详细了解C#中常量的相关知识。

C#中常量是什么?如何定义和使用常量?

C#常量的定义与基础概念

常量和变量的核心区别在于,变量的值可以在程序运行过程中修改,而常量一旦定义并赋值后,就无法再更改其值。C#中的常量主要分为两种类型:静态常量动态常量,分别对应constreadonly两个关键字来定义。

使用const定义的常量属于编译时常量,它的值必须在声明的时候就赋予,而且只能用编译期就能确定的值来初始化。而readonly定义的常量属于运行时常量,它的值可以在声明时或者构造函数中初始化,允许使用运行期才能确定的值。

const常量的定义与使用

const常量的定义语法非常简单,需要在声明时同时赋值,并且默认是静态的,不需要也不能添加static关键字修饰。

基础定义示例

// 定义const常量,必须同时赋值
const int Max_User_Count = 100;
const string Default_User_Role = "普通用户";
const double Pi = 3.1415926;

class Program
{
    static void Main()
    {
        // 直接使用常量,不需要实例化对象
        Console.WriteLine($"最大用户数:{Max_User_Count}");
        Console.WriteLine($"默认角色:{Default_User_Role}");
        // 尝试修改const常量会直接编译报错
        // Max_User_Count = 200; // 这行代码会报错
    }
}

const常量的注意事项

  • const常量只能用值类型(如int、double、char等)、string类型或者枚举类型来定义,不能用引用类型(除了string)来定义const常量。
  • const常量默认是静态的,调用的时候不需要通过类的实例来访问,直接通过类名访问即可,如果在同一个类中可以直接使用常量名。
  • const常量的值必须是编译期就能确定的,比如不能直接用方法的返回值来初始化const常量。

readonly常量的定义与使用

readonly常量属于运行时常量,它的初始化方式更灵活,可以在声明时赋值,也可以在类的构造函数中赋值,而且它可以修饰静态成员和实例成员。

实例readonly常量示例

class UserConfig
{
    // 声明readonly实例常量,初始化值
    public readonly int Default_Timeout;
    public readonly string Config_Path;

    // 在构造函数中给readonly常量赋值
    public UserConfig(int timeout, string path)
    {
        Default_Timeout = timeout;
        Config_Path = path;
        // 构造函数中也可以修改,只需要在对象构造完成前赋值即可
    }

    // 也可以声明时直接赋值
    public readonly bool Is_Enable_Log = true;
}

class Program
{
    static void Main()
    {
        UserConfig config = new UserConfig(30, "/config/user.json");
        Console.WriteLine($"超时时间:{config.Default_Timeout}");
        Console.WriteLine($"配置路径:{config.Config_Path}");
        // 对象构造完成后尝试修改readonly常量会报错
        // config.Default_Timeout = 60; // 这行代码会报错
    }
}

静态readonly常量示例

class SystemConfig
{
    // 静态readonly常量,在静态构造函数中初始化
    public static readonly string System_Name;
    public static readonly int Max_Request_Count;

    // 静态构造函数,只会在类第一次被使用时执行一次
    static SystemConfig()
    {
        System_Name = "用户管理系统";
        // 可以读取配置文件或者调用方法获取值(运行期才能确定的值)
        Max_Request_Count = GetMaxRequestCount();
    }

    private static int GetMaxRequestCount()
    {
        // 模拟从配置文件读取最大请求数
        return 1000;
    }
}

class Program
{
    static void Main()
    {
        Console.WriteLine($"系统名称:{SystemConfig.System_Name}");
        Console.WriteLine($"最大请求数:{SystemConfig.Max_Request_Count}");
    }
}

const和readonly的核心区别

很多初学者容易混淆这两种常量,我们可以通过下面的表格来清晰对比两者的差异:

对比项const常量readonly常量
初始化时机编译期,声明时必须赋值运行期,可以在声明时或构造函数中赋值
是否静态默认是静态,不能加static可以是静态或实例,可加static修饰
可修饰类型值类型、string、枚举任意类型
赋值限制只能用编译期确定的常量值可以用运行期确定的值,包括方法返回值
适用场景永远不会改变的基础值,如圆周率、固定配置需要根据运行环境、配置初始化的常量

常量使用的常见注意事项

  • 不要过度使用常量,如果某个值可能会随着需求变化,就不要定义为常量,避免修改时需要重新编译所有引用该常量的代码。
  • 如果常量的值是运行期才能确定的,比如从配置文件读取的端口号、从数据库查询的系统参数,一定要用readonly而不是const
  • 定义常量的时候尽量使用有意义的名称,避免使用a、b这类无意义的名字,提升代码的可读性。
  • 如果需要在多个项目之间共享常量,建议将常量定义在公共的类库中,避免每个项目都重复定义相同的常量。

总结

C#中的常量是提升代码可维护性的重要工具,理解constreadonly的差异是正确使用常量的关键。如果是编译期就确定、永远不会改变的值,优先用const;如果是运行期才能确定,或者可能会根据场景变化的常量,就用readonly。实际开发中结合场景选择合适的常量类型,才能让代码更健壮、更易维护。

C#常量constreadonly静态常量修改时间:2026-05-29 04:42:34

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。