c# - C# 中的 private const 和 private readonly 变量之间有区别吗?

标签 c# constants readonly

在 C# 中使用 private const 变量或 private static readonly 变量有区别吗(除了必须分配 const一个编译时表达式)?

因为它们都是私有(private)的,所以没有与其他库的链接。那会有什么不同吗?例如,它可以产生性能差异吗?实习字符串?有没有类似的?

最佳答案

好吧,您可以在属性中使用常量,因为它们作为编译时存在。您无法预测静态只读变量的值,因为 .cctor 可以从配置等初始化它。

在使用方面,常量被嵌入到调用代码中。这意味着,如果您重新编译一个 dll 来更改一个public 常量,但不更改消费者,那么消费者仍将使用原始值。使用只读变量,这不会发生。反过来说,常量(非常非常小)更快,因为它只是加载值(而不是必须取消引用它)。

重新实习;尽管您可以手动执行此操作,但这通常是文字的编译器/运行时功能;如果您通过文字初始化一个只读字段:

someField = "abc";

然后 "abc" 将被实习。如果你从配置中读取它,它不会。因为常量字符串必须是文字,所以它也会被驻留,但访问方式不同:同样,从字段中读取是取消引用,而不是 ldstr。 .

关于c# - C# 中的 private const 和 private readonly 变量之间有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/410723/

相关文章:

c# - C++/CLI/C# BadImageFormat 加载表单时出现异常

c# - 找不到 ParseStringConverter

使用 protected 构造函数的 C++ 常量实例?

c++ - map 的开始迭代器不起作用 C++

c++ - C# 的 readonly 字段修饰符的 C++ 等价物是什么?

c# - Gtk.Application.Invoke 不工作

c# - 带有引用类型变量的对象类型装箱

c - 使用 const 成员将结构转换为结构

c# - 将私有(private)字段标记为只读有什么意义吗?

c# - 具有丰富类型的 C# 中的 Const 正确性