C#中const与readonly关键字区别

const 和 readonly 关键字都用于定义常量,但它们之间有一些重要的区别:

const:

  • const 关键字用于定义编译时常量,其值在编译时就已经确定,并且不能在运行时修改。
  • const 常量在声明时必须初始化。
  • const 常量默认是静态的,因此它们在声明它们的类中的任何位置都可以使用,而不需要实例化类。
  • const 常量的值在编译时被直接嵌入到使用该常量的地方。这意味着,如果一个 const 常量在一个库中被修改了,那么使用该库的所有客户端代码都需要重新编译以使用新的值。

示例:

csharp 复制代码
public class MyClass
{
    public const int MyConstant = 10;
}

// 在其他类中使用 const 常量
public class OtherClass
{
    public void PrintConstant()
    {
        Console.WriteLine(MyClass.MyConstant);
    }
}

readonly:

  • readonly 关键字用于定义运行时常量,其值在运行时确定,并且只能在声明时或构造函数中初始化,初始化后就不能再修改。
  • readonly 关键字可用于实例字段或静态字段。
  • readonly 关键字允许在构造函数中初始化,这使得可以在构造函数中基于参数或其他条件设置常量的值。

示例:

csharp 复制代码
public class MyClass
{
    public readonly int MyReadOnlyField;

    // 构造函数中初始化 readonly 字段
    public MyClass(int value)
    {
        MyReadOnlyField = value;
    }
}

// 在其他类中使用 readonly 字段
public class OtherClass
{
    public void PrintReadOnlyField()
    {
        MyClass obj = new MyClass(20);
        Console.WriteLine(obj.MyReadOnlyField);
    }
}

如果你知道一个值在编译时就会被确定,并且不会更改,那么使用 const。

如果你需要一个值在运行时才能确定,并且在初始化后不会更改,那么使用readonly。

相关推荐
lly20240628 分钟前
C 标准库 - `<stdio.h>`
开发语言
沫璃染墨30 分钟前
C++ string 从入门到精通:构造、迭代器、容量接口全解析
c语言·开发语言·c++
jwn99931 分钟前
Laravel6.x核心特性全解析
开发语言·php·laravel
迷藏49433 分钟前
**发散创新:基于Rust实现的开源合规权限管理框架设计与实践**在现代软件架构中,**权限控制(RBAC)** 已成为保障
java·开发语言·python·rust·开源
功德+n1 小时前
Linux下安装与配置Docker完整详细步骤
linux·运维·服务器·开发语言·docker·centos
明日清晨1 小时前
python扫码登录dy
开发语言·python
我是唐青枫1 小时前
C#.NET gRPC 深入解析:Proto 定义、流式调用与服务间通信取舍
开发语言·c#·.net
JJay.1 小时前
Kotlin 高阶函数学习指南
android·开发语言·kotlin
bazhange1 小时前
python如何像matlab一样使用向量化替代for循环
开发语言·python·matlab
jinanwuhuaguo1 小时前
截止到4月8日,OpenClaw 2026年4月更新深度解读剖析:从“能力回归”到“信任内建”的范式跃迁
android·开发语言·人工智能·深度学习·kotlin