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 不可修改
学习小结:以上是我学习这个知识点时的笔记和心得。技术学习没有捷径,多写多练多踩坑,自然就掌握了。如果这篇笔记对你有帮助,欢迎继续看看其他文章。