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

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 字段的值可以在声明时或构造函数中赋值,之后不能再修改,适用于运行时才能确定的值。

可以是任意类型,包括自定义类、数组等复杂类型。 允许在构造函数中根据逻辑动态赋值,灵活性更高。 每个实例可以有不同的 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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 19:23:41
下一篇 2025年12月12日 20:14:05

相关推荐

发表回复

登录后才能评论
关注微信