const是编译时常量,值必须在声明时确定且仅支持基本类型和enum;readonly是运行时常量,可在构造函数中赋值,支持任意类型,可为实例成员。

在C#中,const 和 readonly 都可用于定义不可变的值,但它们在使用方式、生命周期和适用场景上有本质区别。理解这些差异有助于写出更安全、高效的代码。
const:编译时常量
const 用于声明编译时常量,其值必须在编译时就能确定,并且一旦定义就不能更改。
只能用于基本数据类型(如 int、string、double)、enum 类型或 null 引用类型。 值必须在声明时赋值,不能在构造函数或其他地方设置。 属于类级别,隐式静态,访问时不需要实例对象。 在编译时会被直接替换为对应的字面值,不占用运行时内存空间。
例如:
public const int MaxCount = 100;public const string AppName = "MyApp";
readonly:运行时常量
readonly 字段的值可以在声明时或构造函数中赋值,之后不能再修改,适用于运行时才能确定的值。
可以是任意类型,包括自定义类、数组等复杂类型。 允许在构造函数中根据逻辑动态赋值,灵活性更高。 每个实例可以有不同的 readonly 值(除非配合 static 使用)。 值在运行时确定,不会被编译器内联替换。
例如:
public readonly DateTime CreatedTime;public readonly List Tags;public MyClass(){ CreatedTime = DateTime.Now; Tags = new List { "default" };}
关键区别总结
赋值时机:const 必须在编译时确定;readonly 可在运行时通过构造函数赋值。 类型限制:const 不支持复杂对象;readonly 没有此限制。 静态性:const 隐式静态;readonly 可以是实例成员。 性能影响:const 被内联,无字段访问开销;readonly 是真正的字段,有存储和访问成本。
选择哪个取决于具体需求:如果值固定且简单,优先用 const;如果需要运行时初始化或使用复杂类型,应使用 readonly。
基本上就这些。
以上就是C#中const和readonly有什么不同 – 定义不可变常量的两种方式的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1442789.html
微信扫一扫
支付宝扫一扫