2024-04-08 · C# 基础 · 学习笔记

readonly 和 const 的区别

const 和 readonly 都表示"不可修改",但本质不同。const 是编译期常量,值必须在声明时确定,编译后直接嵌入调用方程序集。readonly 是运行期只读,可以在构造函数里赋值。

自己的经验:数字、字符串常量用 const;从配置文件读取的值用 static readonly。坑:如果 const 值变了,调用方需要重新编译才能拿到新值,因为 const 的值被硬编码到了调用方。

对比:const 只能用于值类型和 string;readonly 可以是任意类型;const 隐含 static;readonly 实例字段每个实例可以不同。

代码示例

public class Settings
{
    // const:编译期常量,必须立即赋值
    public const string Version = "1.0.0";
    public const double Pi = 3.14159;

    // readonly:实例只读,构造函数里赋值
    public readonly string AppName;

    // static readonly:静态只读
    public static readonly DateTime BuildTime;

    static Settings()
    {
        BuildTime = DateTime.Now;
    }

    public Settings(string name)
    {
        AppName = name; // 构造函数里可以赋值
    }
}

// 使用
Console.WriteLine(Settings.Version);  // 1.0.0
var s = new Settings("Test");
Console.WriteLine(s.AppName);          // Test
// s.AppName = "其他"; // 编译错误,readonly 不可修改
学习小结:以上是我学习这个知识点时的笔记和心得。技术学习没有捷径,多写多练多踩坑,自然就掌握了。如果这篇笔记对你有帮助,欢迎继续看看其他文章。