协慌网

登录 贡献 社区

静态只读与 const

我已经读过conststatic readonly字段。我们有一些只包含常量值的类。用于我们系统中的各种事物。所以我想知道我的观察结果是否正确:

对于所有公开的内容,这些常量值是否应始终是static readonly ?并且只对内部 / 受保护 / 私有值使用const

您有什么推荐的吗?我是否可能甚至不使用static readonly字段,而是使用属性?

答案

public static readonly字段有点不寻常; public static属性(只有get )会更常见(可能由private static readonly字段支持)。

const值直接烧入呼叫站点; 这是双刃:

  • 如果在运行时获取值,可能是从 config 获取它是没用的
  • 如果更改 const 的值,则需要重建所有客户端
  • 但它可以更快,因为它避免了方法调用...
  • ...... 无论如何,JIT 有时可能已将其内联

如果值永远不会改变,则 const 很好 - Zero等会产生合理的结果; p 除此之外, static属性更常见。

如果Consumer在不同的程序集中,我会使用static readonly 。将constConsumer放在两个不同的组件中是一种很好的方式来拍摄自己的脚

几点需要注意的相关事项:

const int a

  • 必须初始化。
  • 初始化必须在编译时

readonly int a

  • 可以使用默认值,而无需初始化。
  • 初始化可以在运行时完成(编辑:仅在构造函数内)。