C#中const和readonly有什么不同 - 定义不可变常量的两种方式

星降
发布: 2025-12-09 01:01:10
原创
347人浏览过
const是编译时常量,值必须在声明时确定且仅支持基本类型和enum;readonly是运行时常量,可在构造函数中赋值,支持任意类型,可为实例成员。

c#中const和readonly有什么不同 - 定义不可变常量的两种方式

在C#中,constreadonly 都可用于定义不可变的值,但它们在使用方式、生命周期和适用场景上有本质区别。理解这些差异有助于写出更安全、高效的代码。

const:编译时常量

const 用于声明编译时常量,其值必须在编译时就能确定,并且一旦定义就不能更改。

  • 只能用于基本数据类型(如 int、string、double)、enum 类型或 null 引用类型。
  • 值必须在声明时赋值,不能在构造函数或其他地方设置。
  • 属于类级别,隐式静态,访问时不需要实例对象。
  • 在编译时会被直接替换为对应的字面值,不占用运行时内存空间。

例如:

public const int MaxCount = 100;
public const string AppName = "MyApp";
登录后复制

readonly:运行时常量

readonly 字段的值可以在声明时或构造函数中赋值,之后不能再修改,适用于运行时才能确定的值。

墨狐AI
墨狐AI

5分钟生成万字小说,人人都是小说家!

墨狐AI 249
查看详情 墨狐AI
  • 可以是任意类型,包括自定义类、数组等复杂类型。
  • 允许在构造函数中根据逻辑动态赋值,灵活性更高。
  • 每个实例可以有不同的 readonly 值(除非配合 static 使用)。
  • 值在运行时确定,不会被编译器内联替换。

例如:

public readonly DateTime CreatedTime;
public readonly List<string> Tags;

public MyClass()
{
    CreatedTime = DateTime.Now;
    Tags = new List<string> { "default" };
}
登录后复制

关键区别总结

  • 赋值时机:const 必须在编译时确定;readonly 可在运行时通过构造函数赋值。
  • 类型限制:const 不支持复杂对象;readonly 没有此限制。
  • 静态性:const 隐式静态;readonly 可以是实例成员。
  • 性能影响:const 被内联,无字段访问开销;readonly 是真正的字段,有存储和访问成本。

选择哪个取决于具体需求:如果值固定且简单,优先用 const;如果需要运行时初始化或使用复杂类型,应使用 readonly

基本上就这些。

以上就是C#中const和readonly有什么不同 - 定义不可变常量的两种方式的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号